我正在构建一个Rails应用程序,其中有以下实体:用户、位置和评审。我想让每个用户只为一个地方添加一个评论。我想知道什么是最好的地方来进行这种验证-控制器还是模型?
这就是现在的样子:
审查(模式):
class Review < ActiveRecord::Base
belongs_to :user
belongs_to :place
...地点(模型):
class Place < ActiveRecord::Base
has_many :reviews
...用户(模型):
class User < ActiveRecord::Base
has_many :reviews
...ReviewsController:
def create
@place = Place.find(params[:place_id])
existing_reviews_count = Review.where(:place_id => @place.id).where(:user_id => current_user.id).count
if existing_reviews_count == 0
review = @place.reviews.create(review_params)
review.user = current_user
review.save
# OK
else
# BAD
end
@reviews = Review.all
end我认为最好对模型进行验证。我说的对吗?
发布于 2014-07-11 20:56:59
在评审中尝试使用以下验证
class Review < ActiveRecord::Base
belongs_to :user
belongs_to :place
validates :place_id, :uniqueness => {:scope => :user_id}
...此外,还可以在reviews表中对user_id和place_id进行唯一性约束的数据库索引。
https://stackoverflow.com/questions/24706211
复制相似问题