我是rails的新手,但却找不到适合自己的东西.
在我的应用程序中,我有产品,评论和用户.
评论belongs_to用户和产品,同时用户和产品"has_many"评论.
但是,我想限制用户为每个产品输入多个评论(每个产品都是唯一的).因此,如果用户为产品创建评论并尝试为同一产品撰写另一篇评论,则会告诉他们不允许这样做,但可以编辑他们现有的评论.
我的问题是:我应该在控制器级别执行此操作,还是可以通过验证(这似乎是一个更简单的解决方案)来执行此操作?只是不知道如何处理它.
您可以使用模型验证轻松完成此操作,索引也可以提供帮助.但是请注意,如果您在没有附带ActiveRecord验证的情况下执行唯一索引,则保存将无提示失败并导致可用性/调试问题.
这应该这样做:
class Review < ActiveRecord::Base
validates :user_id, :uniqueness => { :scope => :product_id,
:message => "Users may only write one review per product." }
end
Run Code Online (Sandbox Code Playgroud)
如果要添加索引,请在迁移中尝试:
class AddUniquenessConstraintToReviews < ActiveRecord::Migration
add_index :review, [:user_id, :product_id],
:name => "udx_reviews_on_user_and_product", :unique => true
end
Run Code Online (Sandbox Code Playgroud)
编辑:作为一个全职的Rails开发人员,我仍然会经常参考ActiveRecord文档来修复这些事情的语法.你也应该!
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |