如何检查数据库中是否存在值?

时间:2016-01-08 19:57:09

标签: ruby-on-rails

我想检查我的模型中是否已存在具有相同值的记录。

我在预告片模型中有这个创建功能,

def create
  trailer = Trailer.create(trailer_params)
  redirect_to :root
end

所有预告片记录的值均为movie_id。因此,如果没有检查,可能会发生这样的事情,

{"id":9,"movie_id":"5","link":"LsjX5dqHLuw"},    
{"id":10,"movie_id":"5","link":"LsjX5dqHLuw"}]

具有相同链接和相同movie_id值的2条记录。

所以我希望能够检查一个带有movie_id值的记录是否已经存在。如果是这样,不要做任何事情。否则创建记录。

我做了一些研究并创造了这个,但这总是进入else状态。

def create
  if Trailer.exists?(:movie_id => :movie_id).present?
    trailer = Trailer.create(trailer_params)
    redirect_to :root
  else
    redirect_to :root
  end
end

2 个答案:

答案 0 :(得分:1)

你可以使用first_or_create:

trailer = Trailer.first_or_create(trailer_params)

这将使您获得带有这些参数的第一个或如果它不存在则创建它。 http://guides.rubyonrails.org/v3.2.9/active_record_querying.html#first_or_create

答案 1 :(得分:0)

为什么不使用ActiveRecord的唯一性验证器? http://guides.rubyonrails.org/active_record_validations.html#uniqueness

您可以像这样使用

# your Trailer model
class Trailer < ActiveRecord::Base
  validates :movie_id, uniqueness: true
end

# Then your controller may look like
def create
  Trailer.create(trailer_params)
  redirect_to :root
end