Activerecord Rails 4中的Build vs new

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

我的问题类似于

在Rails 3中,我可以在视图中构建一个对象,通过cancan检查授权

<% 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 %>