渲染Rails部分形式在另一部分

时间:2013-09-07 22:17:46

标签: ruby-on-rails

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

在测试的 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 %>

但我得到一个例外:

  

未定义的方法`测试&#39;为零:NilClass

所以@project显然是零。我理解我的设置有点奇怪,所以我不确定如何重构这个工作?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

<%= render @tests, project: @project %>

然后

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

我们的想法是将@project实例变量作为局部变量传递。

答案 2 :(得分:-1)

两个部分都在同一个视图中吗?

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

示例:

<%= render @tests, project: @project %>