我有称为项目和测试的模型。一个项目有很多测试。
在测试的 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
显然是零。我理解我的设置有点奇怪,所以我不确定如何重构这个工作?
答案 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 %>