我想检查我的模型中是否已存在具有相同值的记录。
我在预告片模型中有这个创建功能,
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
答案 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