簡體   English   中英

Rails - 如何限制用戶為每個關聯輸入多個記錄

[英]Rails - how to restrict user from entering more than one record per association

我是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

如果要添加索引,請在遷移中嘗試:

class AddUniquenessConstraintToReviews < ActiveRecord::Migration
  add_index  :review, [:user_id, :product_id],
    :name => "udx_reviews_on_user_and_product", :unique => true
end

編輯 :作為一個全職的Rails開發人員,我仍然會經常參考ActiveRecord文檔來修復這些事情的語法。 你也應該!

更好地在評論模型中進行驗證。 可以將以下方法添加到驗證中。[假設您已正確設置關聯]

def validate_only_one_review_per_user
  !(@user.products.include? @product)
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM