我想为每个"用户"验证一个"房屋名称"。如果我只放入
验证:House_name,唯一性:true然后它会检查所有的姓氏。我只想根据我的当前用户进行验证。即,一个用户不能在同一名称中具有多个房屋名称,但其他用户可以具有相同的房屋名称。
我之前也遇到过类似的问题。根据您的设置方式,有两种解决方案。
- 在
user.rb
中,您可以添加这样的自定义方法(假设User有一个名为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
假设您的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
试试这个:
class User
has_many :houses
end
class House
belongs_to :user
validates_uniqueness_of :name, scope: :user_id
end
API文件