基于相关记录的验证

发布于 2024-10-14 03:25:51 字数 516 浏览 1 评论 0原文

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

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

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

这是有道理的。

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

I have two models: User and Lesson. I only want lessons to be assigned to users that are admins.

What is the best way to ensure this? I am currently attempting to create a custom validator like so:

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

But this leads to Rspec saying:

undefined method `admin?' for nil:NilClass

Which makes sense.

Is a custom validator the best way to do this? Or should I be checking if the to-be-assigned user is an admin in a controller?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

溺孤伤于心 2024-10-21 03:25:51

我认为最简单的方法是:

# 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? 方法。

I think that the easiest way of doing it is:

# Lesson model
validate :allow_only_admins

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

I assumed that you have association named user and that your user object responds to admin? method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文