首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -特殊验证案例

Rails -特殊验证案例
EN

Stack Overflow用户
提问于 2014-07-11 20:41:11
回答 1查看 45关注 0票数 2

我正在构建一个Rails应用程序,其中有以下实体:用户、位置和评审。我想让每个用户只为一个地方添加一个评论。我想知道什么是最好的地方来进行这种验证-控制器还是模型?

这就是现在的样子:

审查(模式):

代码语言:javascript
复制
class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :place
  ...

地点(模型):

代码语言:javascript
复制
class Place < ActiveRecord::Base
  has_many :reviews
  ...

用户(模型):

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_many :reviews
  ...

ReviewsController:

代码语言:javascript
复制
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

我认为最好对模型进行验证。我说的对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-11 20:56:59

在评审中尝试使用以下验证

代码语言:javascript
复制
class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :place
  validates :place_id, :uniqueness => {:scope => :user_id}
  ...

此外,还可以在reviews表中对user_id和place_id进行唯一性约束的数据库索引。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24706211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档