Activerecord Rails 4中的Build vs new
我的问题类似于 在Rails 3中,我可以在视图中构建一个对象,通过cancan检查授权Activerecord Rails 4中的Build vs new,activerecord,ruby-on-rails-4,Activerecord,Ruby On Rails 4,我的问题类似于 在Rails 3中,我可以在视图中构建一个对象,通过cancan检查授权 <% if can? :create, @question.answers.new %> # Code... <% end %> 正因为如此,我不能只按班级核对。实际上需要一个实际的实例来根据关系进行比较。我对CanCan并不完全了解最新情况,但除非创建能力与CanCan中的特定@question实例相关联,否则您可以直接检查类的授权。不需要构建实例,视图中也没有无关对象 &l
<% if can? :create, @question.answers.new %>
# Code...
<% end %>
正因为如此,我不能只按班级核对。实际上需要一个实际的实例来根据关系进行比较。我对CanCan并不完全了解最新情况,但除非创建能力与CanCan中的特定
@question
实例相关联,否则您可以直接检查类的授权。不需要构建实例,视图中也没有无关对象
<% if can? :create, Answer %>
# Code..
<% end %>
#代码。。
编辑:
在编辑的基础上,尝试构建与所需问题关联的独立答案
<% if can? :create, Answer.new(question: @question) %>
# Code..
<% end %>
#代码。。
至少,这不应该在您的
@question.answers
集合中添加Answer
实例。我可以解决这个问题,并找到两种方法
首先,正如所指出的,使用scoped
解决了这个问题。因此,我使用的是@question.answers.scoped.new
。正如我所解释的,一个简单的答案.new(问题:@question)
没有成功,因为需要更多的数据,而且这个例子过于简单
第二,坚持MVC模式。控制员负责准备数据。因此,在循环问题时,您在控制器中准备数据,如
@answers=@question.answers
。现在,@answers
集合不受关联上的.new
或.build
的影响。如果可以,怎么样创建、回答
作为一次性物品?(看起来你可以从这里通过课程:)问题是,限制可能适用于与特定问题相关的答案子集,IMHO需要一个实例来检查。也许包括你的CanCan能力定义可以提供更多的见解?非常感谢你的帮助,我现在可以解决它,不幸的是,没有你的答案。但是请投赞成票!
<% if can? :create, Answer.new(question: @question) %>
# Code..
<% end %>