Rails - 根据另一个模型验证属性

Bry*_*yce 3 validation ruby-on-rails ruby-on-rails-3

我有一个Assignment类,它同时属于User类和Role类.它存储三个值 - 对其所属的用户的引用,对其所属的角色的引用,以及指示创建Assignment实例的用户的名称的字符串值.

class Assignment < ActiveRecord::Base
  include ActiveModel::Validations

  belongs_to :user
  belongs_to :role  

  attr_accessible :user, :role, :assigned_by_user

  ...
Run Code Online (Sandbox Code Playgroud)

在我的模型验证中,我想执行检查以确保assigned_by_user属性与有效用户的名称匹配.但是,我似乎无法访问Assignment模型中的User.find(...)方法.

我将如何实现此功能?

Kyl*_*e C 7

将"检查用户"模块添加到lib文件夹(check_user.rb).然后在那个文件中

 module CheckUser

 def search_user
  user = User.find_by_name(self.assigned_by_user)
  unless item.nil?
    errors.add(:name_found, "This username has already been taken")
  end
 end
Run Code Online (Sandbox Code Playgroud)

然后在你的Assignment模型中

 class Assignment < ActiveRecord::Base
  include CheckUser
  validate :search_user
Run Code Online (Sandbox Code Playgroud)

  • 额外说明:也可以在您的模型中添加一个类似的方法并在那里调用它,而不是将它扔到一个完全不同的文件中。 (2认同)