0

我有称为项目和测试的模型。一个项目有很多测试。

在测试的index.html.erb中,我有:

<%= render @tests %>

因此,我有一个名为_test.html.erb的文件,其中有:

<%= render "form" %>

然后我有一个名为_form.html.erb的文件:

<%= form_for([@project, @project.tests.build]) do |f| %>
        <p>
            <%= f.label :name %>
            <%= f.text_field :name %>
        </p>
<% end %>

但我得到一个例外:

nil:NilClass 的未定义方法“测试”

所以@project显然是零。我知道我的设置有点奇怪,所以我不确定如何重构它才能工作?

4

3 回答 3

1

可以从任何级别的渲染访问实例变量。您可以在彼此内部渲染 100 个部分,并且您仍然可以访问这些相同的 ivars。

这个问题看起来你实际上并没有在任何地方设置@project。您可能正在表单中寻找“test.project”。

于 2013-09-07T22:58:05.453 回答
0
<%= render @tests, project: @project %>

然后

<%= render 'form', project: project %>

这个想法是将@project实例变量作为局部变量传递。

于 2013-09-07T22:20:37.227 回答
-1

两个部分是否在同一个视图中?

您还必须将@project 对象传递给使用@project 的部分和每个部分。

例子:

<%= render @tests, project: @project %>
于 2013-09-07T22:20:31.100 回答