Rails Partial: Недефинирана локална променлива

Използвам релси рядко, така че извинете, ако това е очевидно. Разгледах другите въпроси, работя от Ruby On Rail Guide, и изглежда, че правя това правилно, но все още не мога да накарам локалните си променливи да работят.

todays/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 работеше, преди да започна да се опитвам да добавя частични части за допълнителна гъвкавост. Сега изглежда не мога да предам правилно местните.

Предишният ми работен код беше

todays/show.html.erb

<p>
<strong>Tasks:</strong> 

<% @today_lines.each do |today_line| %>
  <p><%= render today_line.next_step %></p>
<% end %>
</p>

Съобщение за грешка

Грешка в името в днешното#шоу

Показва /.../app/views/next_steps/_next_step_today.html.erb, където ред #3 е повдигнат:

недефинирана локална променлива или метод `today_line' за #‹#:0x007f930adbd860> Извлечен източник (около ред #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>

Някакви идеи?

РЕДАКТИРАНЕ: ОКОНЧАТЕЛЕН РАБОТЕЩ КОД

todays/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: изисква да използвате частичното име на файл за локалната променлива.

Освен това при търсенето си открих, че ако не използвате partial:, можете също да пропуснете locals: и вместо това просто да използвате името на променливата, което е по-чисто. Тази промяна е показана в _next_step_today.html.erb. Иска ми се да мога да назова променливата на колекцията, вместо да използвам частичното име на файла или вместо да използвам всеки, но това е достатъчно близко и работи.


person Ken    schedule 13.10.2015    source източник


Отговори (2)


Името на променливата в частта се извлича от името на самата част, а не от името на колекцията.

Тогава вашият _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, т.е

person Thomas Hennes    schedule 13.10.2015

Show трябва да укаже името на ключа, който частичният ще използва. Така:

<%= render partial: "next_steps/next_step_today", 
    today_lines: @today_lines %>

Коригирайте правописа и в next_step_today частично:

  <%= render partial: "next_steps/next_step",
      locals: {next_step: today_lines.next_step} %>
person baron816    schedule 13.10.2015