我正在尝试弄清楚如何将:collection
用户限制为can? :manage, @article.website
. 如前所述,我正在使用 Cancan,我觉得我应该能够做这样的事情:
= f.input :user_id, collection: User.all unless cannot? :manage, @article.website
我正在使用 simple_form_for,因此使用了 f.input。有任何想法吗?
我正在尝试弄清楚如何将:collection
用户限制为can? :manage, @article.website
. 如前所述,我正在使用 Cancan,我觉得我应该能够做这样的事情:
= f.input :user_id, collection: User.all unless cannot? :manage, @article.website
我正在使用 simple_form_for,因此使用了 f.input。有任何想法吗?
CanCan 旨在回答“用户 U 可以做 X 吗?”这个问题。我不认为 cancan 旨在有效地回答“哪些用户可以做 X?”这个问题。从理论上讲,您可以执行以下操作:
User.all.select { |u| Ability.new(u).can?(:manage, @article.website) }
但这将是非常低效的。
除非您的用户数量很少,否则最好在 cancan 之外处理此问题。
这不应该在视图中完成 - 可能视图助手最适合这种情况,但您应该只具有返回特定人可以看到的集合的条件。
module SomethingHelper
def something_user_ids(article)
if can? :manage, article.website
User.all
else
User.where(guest: true) # or whatever
end
end
end
那么在您看来,您只会做类似的事情。
= f.input :user_id, collection: something_user_ids(@article)