我想为每个“用户”验证一个“房屋名称”。
如果我只放
验证:House_name,唯一性:true
然后它将检查所有房屋名称。我只想根据当前用户进行验证。也就是说,一个用户不能使用多个相同的房屋名称,而其他用户可以使用相同的房屋名称。
答案 0 :(得分:0)
我前段时间也遇到过类似的问题。根据您的设置方式,有两种解决方案。
user.rb
中,您可以像这样添加自定义方法(假设用户有一个名为house_names
的数组: validate :house_name_is_unique
def house_name_is_unique
unless (house_names.length == houses.uniq.length)
errors.add(:house_names, :blank, message: "name taken")
end
end
上面的代码将检查房屋名称的数组,并且uniq
方法将筛选出重复项,因此,如果它们的长度相同,则没有重复项,因此什么也不做,否则会抱怨。
scope
(未经测试)您可以将以下内容添加到house.rb
类中 validates :name, uniqueness: { scope: :user_id, message: "no duplicate house name" }
您可以在此处了解有关范围的更多信息:http://guides.rubyonrails.org/active_record_validations.html#uniqueness
答案 1 :(得分:0)
假设您的user
模型具有has_many: houses
关联,则可以尝试以下操作:
validate :house_uniqueness
def house_uniqueness
errors.add(:base, "House name has been taken") if House.exists?(user: self, name:
self.house_name)
end
答案 2 :(得分:0)
尝试一下:
class User
has_many :houses
end
class House
belongs_to :user
validates_uniqueness_of :name, scope: :user_id
end