我很少使用rails,所以请原谅这是显而易见的。我查看了其他问题,我在Ruby On Rail Guide工作,看起来我正确地做了这个,但我仍然无法让我的局部变量起作用。
各国/ show.html.erb
<p>
<strong>Tasks:</strong>
<%= render partial: "next_steps/next_step_today",
collection: @today_lines %>
</p>
next_steps / _next_step_today.html.erb
<p>
<%= render partial: "next_steps/next_step",
locals: {next_step: today_line.next_step} %>
<%= link_to 'x', today_line, method: :delete, data: { confirm: 'Are you sure?' } %>
</p>
next_steps / _next_step.html.erb
<span class="<%= next_step.complete ? "completed_next_step" : ""%> next_step_span_<%= next_step.id%>">
<%= form_for(next_step,
:remote => true,
:html => {:'data-type' => 'json',
:multipart => true,
:id => "edit_next_step_#{next_step.id}_#{rand()}"}
) do |f| %>
<%= f.hidden_field( :id, :value => next_step.id) %>
<%= f.hidden_field( :note_id, :value => next_step.note_id) %>
<%= f.hidden_field( :content, :value => next_step.content) %>
<%= f.hidden_field( :due_date, :value => next_step.due_date) %>
<%= f.check_box( :complete, :class => "next_step_complete_button" ) %>
<%= next_step.content %>
<% end %>
</span>
我知道在我开始尝试添加部分内容以获得额外的灵活性之前,最后一个部分_next_step.html.erb
正在运行。现在我似乎无法正确传递本地人。
我之前的工作代码是
各国/ show.html.erb
<p>
<strong>Tasks:</strong>
<% @today_lines.each do |today_line| %>
<p><%= render today_line.next_step %></p>
<% end %>
</p>
错误消息
Todays中的NameError#show
显示/..//app/views/next_steps/_next_step_today.html.erb第3行:
未定义的局部变量或方法`today_line'用于#&lt;#:0x007f930adbd860&gt; 提取的来源(第3行):
<p>
<%= render partial: "next_steps/next_step",
locals: {next_step: today_line.next_step} %>
<%= link_to 'x', today_line, method: :delete, data: { confirm: 'Are you sure?' } %>
</p>
有什么想法吗?
编辑:最终工作代码
各国/ show.html.erb
<p>
<strong>Tasks:</strong>
<%= render partial: "next_steps/next_step_today",
collection: @today_lines %>
</p>
_next_step_today.html.erb
<p>
<%= render "next_steps/next_step",
next_step: next_step_today.next_step %>
<%= link_to 'x', next_step_today, method: :delete, data: { confirm: 'Are you sure?' } %>
</p>
collection:
确实要求您使用本地var的部分文件名。
我在搜索中也发现,如果你不使用partial:
,你也可以省略locals:
,而只使用变量名称,这更干净。此更改显示在_next_step_today.html.erb
中。我希望我也可以命名集合变量,而不是使用部分文件名,或者不使用每个,但这已经足够接近,并且正常工作。
答案 0 :(得分:1)
显示需要指定部分将使用的键名。所以:
<%= render partial: "next_steps/next_step",
locals: {next_step: today_lines.next_step} %>
修复next_step_today部分的拼写:
try_files
答案 1 :(得分:1)
partial中变量的名称来自部分本身的名称,而不是来自集合的名称。
您的_next_step_today.html.erb应该是以下内容:
<p>
<%= render partial: "next_steps/next_step",
locals: {next_step: next_step_today.next_step} %>
<%= link_to 'x', next_step_today, method: :delete, data: { confirm: 'Are you sure?' } %>
</p>
编辑:如果你想坚持@collection约定,那就是