如何用3或语句编写Pundit策略?

时间:2018-05-15 15:38:38

标签: ruby-on-rails ruby conditional control-flow pundit

我有Pundit policy正常工作,但我写它的方式似乎并不是表达这种方式的“最佳”方式。这是一个包含三个“或”语句的政策。这是代码:

def update?
  user.admin? or user.moderator? || user.id == @artist.user_id
end

我能写这个的另一种方式是什么?或者这是表达这个的最佳方式吗?

2 个答案:

答案 0 :(得分:2)

顺便说一句,你可以做类似的事情:

delegate *%w(admin? moderator?), to: :user

def user_artist?
  user == @artist.user
end

def update?
  admin? || moderator? || user_artist?
end

这对我来说似乎很干净。

答案 1 :(得分:1)

两种可能的方式:

def update?
  user.admin_or_moderator? || user == @artist.user
end

admin_or_moderator?只是说,它甚至可能类似于privileged?,并在您的User模型中实施此方法。或

def update?
  %i(admin moderator).include?(user.role) || user == @artist.user
end

我猜你在User模型中有类似角色的东西但是这个想法