<% if can? :create, @question.answers.new %>
# Code...
<% end %>
在Rails 3中,.new
和 .build
的区别在于.build
会将新创建的对象添加到父对象的集合中,这导致视图中出现了额外的记录,显然这是不期望的。
然而,在Rails 4中,两者都会将对象添加到集合中,在视图中呈现为空记录。
有人能提供如何解决这个问题的建议吗?在视图中检查记录是否已经被保存(.persisted?
)是一种选项,但我觉得不应该这样做。
编辑:为了澄清,CanCan 模型看起来像这样:
can :manage, Answer do |answer|
user.belongables.include?(answer.question.try(:belongable))
end
因此,我不能仅通过类来检查。实际的实例是根据关系进行比较所必需的。
if can? :create, Answer
作为一个临时对象怎么样?(看起来你可以从这里传入类:https://github.com/ryanb/cancan/wiki/Checking-Abilities#checking-with-class) - GSP