我的问题类似于Rails 3中的Build vs new。
在Rails 3中,我可以在视图中构建一个对象以通过cancan检查授权。
<% 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
因此,我不能只是按班级检查。实际上需要一个实际实例来根据该关系进行比较。
我可以解决问题,并找到两种方法。
首先,正如https://github.com/rails/rails/issues/9167指出的那样,使用scoped
可以解决此问题。因此,我正在使用@question.answers.scoped.new
。正如我所解释的,Answer.new(question: @question)
由于需要更多的数据,简单的方法没有成功,并且该示例过于简化。
第二,坚持MVC模式。控制器负责准备数据。因此,遍历问题时,您可以像在中那样在控制器中准备数据@answers = @question.answers
。现在,该@answers
集合不受关联.new
或.build
关联的影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句