Где определить _counter для коллекции в Rails 3 - PullRequest
0 голосов
/ 23 ноября 2011

У меня проблема в приложении Rails 3.Я применяю Ajax к форме, но не могу отобразить вновь созданный объект в моем представлении.На данный момент проблема заключается в счетчике Rails 3.Когда я отправляю форму без перезагрузки страницы, моя консоль отображает следующее:

ActionView::Template::Error (undefined local variable or method `superlative_counter' for #<#<Class:0x105bdd4a8>:0x105bd6a40>):
1: <% if superlative_counter + 1 == superlative_count && superlative_count > 1 %>
2:   <li class="superlative">
3:     and <span title="<%=h superlative.name %>"><%=h superlative.body %><p class="deleteSup"><%= link_to 'x', superlative_path(superlative), :method => :delete, :remote => true, :confirm => "Are you sure you want to remove this superlative?" %></p></span>
4:   </li>

Будучи новичком, я не уверен, где определить superlative_counter в моем коде.Я думал, что счетчик был только что включен в Rails:

Rails также делает переменную счетчика доступной в части, вызываемой коллекцией, названной в честь члена коллекции, за которым следует _counter.Например, если вы визуализируете @products, внутри партиала вы можете обратиться к product_counter, чтобы узнать, сколько раз визуализировался партиал.Это не работает в сочетании с параметром: as =>: value.

Вот как я отображаю свою коллекцию:

<li><%= "#{@profile.first_name}" %>&nbsp;is most likely to:&nbsp;</li><%= render :partial => 'superlatives/superlative', :collection => @profile.superlatives, :locals => {:superlative_count => @profile.superlatives.length} %>

Вот мой _superlative.html.erb частичный:

<% if superlative_counter + 1 == superlative_count && superlative_count > 1 %>
  <li class="superlative">
    and <span title="<%=h superlative.name %>"><%=h superlative.body %><p class="deleteSup"><%= link_to 'x', superlative_path(superlative), :method => :delete, :remote => true, :confirm => "Are you sure you want to remove this superlative?" %></p></span>
  </li>
<% elsif superlative_count == 1 %>
  <li class="superlative">
    <span title="<%=h superlative.name %>"><%=h superlative.body %><p class="deleteSup"><%= link_to 'x', superlative_path(superlative), :method => :delete, :remote => true, :confirm => "Are you sure you want to remove this superlative?" %></p></span>
  </li>
<% else %>
<li class="superlative">
  <span title="<%=h superlative.name %>"><%=h superlative.body %><p class="deleteSup"><%= link_to 'x', superlative_path(superlative), :method => :delete, :remote => true, :confirm => "Are you sure you want to remove this superlative?" %></p></span>,&nbsp;
</li>
<% end %>

Если кто-нибудь может помочь мне выяснить, где я должен определить счетчик, я буду признателен за это!

1 Ответ

0 голосов
/ 23 ноября 2011

Вам не нужно нигде определять счетчик.Он инициализируется самим Rails.
Для меня ваш код выглядит нормально.
Тем не менее, попробуйте это:
Сохраните @profile.superlatives в переменной @superlatives и затем выполните:

...: collection => @superlatives:: locals => {: superlative_count => @ superlatives.length}%>

...