【问题标题】:Validation Based Upon Associated Record基于相关记录的验证
【发布时间】:2011-01-25 21:51:39
【问题描述】:

我有两个模型:用户和课程。我只想将课程分配给管理员用户。

确保这一点的最佳方法是什么?我目前正在尝试创建一个自定义验证器,如下所示:

class BelongsToAdminValidator < ActiveModel::EachValidator  
  def validate_each(object, attribute, value)  
    unless value.admin?
      object.errors[attribute] << (options[:message] || "must belong to an admin")  
    end  
  end  
end

但这导致 Rspec 说:

undefined method `admin?' for nil:NilClass

这是有道理的。

自定义验证器是最好的方法吗?或者我应该检查要分配的用户是否是控制器中的管理员?

【问题讨论】:

  • admin? 是在User 中定义的方法吗?也许应该是unless object.admin?
  • 这是一个自动获取“?”的布尔值方法。

标签: ruby-on-rails activerecord rspec bdd


【解决方案1】:

我认为最简单的方法是:

# Lesson model
validate :allow_only_admins

private
def allow_only_admins
  errors.add(:user, "must be admin user!") if (user.blank? || !user.admin?)
end

我假设您有名为 user 的关联,并且您的用户对象响应 admin? 方法。

【讨论】:

  • 完美。比我的方法简单得多。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多