0
我有一個類別模型。我想確保用戶不會將重複的類別名稱添加到他/她的類別列表中。before_validation防止重複的類別名稱
這裏是我的類模型:
class Category < ActiveRecord::Base
belongs_to :user
validates :name, presence: true
validates :user_id, presence: true
before_validation :validate
private
def validate
errors.add(:name, "is already taken") if Category.where("name = '?' AND user_id = ?", self.name, self.user_id).any?
end
end
這裏是我的RSpec測試:
it "is invalid with duplicate name for same user" do
existing_category = Category.first
new_category = Category.new(:name => existing_category.name, :user_id => existing_category.user_id)
expect(new_category).to have(1).errors_on(:name)
end
我應該使用before_save或before_validate?另外,我不確定如何寫這個。我猜如果檢測到重複,我想爲:name添加一個錯誤。以上是我的嘗試,但似乎沒有讓它通過,有什麼明顯的錯誤?另外,這是添加自定義驗證的好習慣嗎?
不明白爲什麼這是downvoted。如果僅僅是因爲Marek沒有注意到用戶部分,但現在它已經更新,這正是OP想要的。 –
@Baloo downvote已被刪除。 :) –
嗨。我已將您的建議添加到模型中,謝謝。當我在rails控制檯中運行describe塊時,它似乎完成了這項工作。大! - 我想我的測試中有一個錯誤,但我無法弄清楚哪裏/爲什麼。有什麼明顯的我做錯了嗎? – Martyn