【问题标题】:Rails - Validating an attribute based on another modelRails - 基于另一个模型验证属性
【发布时间】:2012-08-07 15:27:17
【问题描述】:

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

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

  belongs_to :user
  belongs_to :role  

  attr_accessible :user, :role, :assigned_by_user

  ...

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

我将如何实现此功能?

【问题讨论】:

  • 当然可以!你得到了什么错误?

标签: ruby-on-rails ruby-on-rails-3 validation


【解决方案1】:

将“检查用户”模块添加到您的 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

然后在你的分配模型中

 class Assignment < ActiveRecord::Base
  include CheckUser
  validate :search_user

【讨论】:

  • 哦,太棒了,这比我昨晚拼凑的破解解决方案要好得多。
  • 额外说明:也可以在你的模型中添加一个类似的方法并在那里调用它,而不是把它扔到一个完全不同的文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多