Ruby on rails 如何根据另一个模型为一个模型添加唯一性验证?

Ruby on rails 如何根据另一个模型为一个模型添加唯一性验证?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想验证每个“用户”的“房屋名称”。 如果我把 验证:房屋名称,唯一性:true 然后它会检查所有的户名。我只想基于我的当前用户进行验证。i、 例如,一个用户不能有多个同名的房屋名称,但其他用户可以有相同的房屋名称。我不久前也遇到过类似的问题。根据您的设置方式,有两种解决方案 在user.rb中,您可以添加这样一个自定义方法(假设用户有一个名为house\u names的数组): validate:house\u name\u是唯一的 def house_name_is_unique

我想验证每个“用户”的“房屋名称”。 如果我把
验证:房屋名称,唯一性:true
然后它会检查所有的户名。我只想基于我的当前用户进行验证。i、 例如,一个用户不能有多个同名的房屋名称,但其他用户可以有相同的房屋名称。

我不久前也遇到过类似的问题。根据您的设置方式,有两种解决方案

  • user.rb
    中,您可以添加这样一个自定义方法(假设用户有一个名为
    house\u names
    的数组):
  • validate:house\u name\u是唯一的

    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
    类中
  • 验证:名称,唯一性:{scope::user_id,消息:“没有重复的房屋名称”}


    您可以在此处阅读有关范围的更多信息:

    假设您的
    用户
    模型具有
    多个:房屋
    关联,您可以尝试以下操作:

    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