div_for: NoMethodError - PullRequest
       0

div_for: NoMethodError

3 голосов
/ 30 мая 2011

Я пытаюсь получить учебник по ror и наткнулся на следующую строку кода:

index.html.erb:

<%= render :partial => @players %>

_player.html.erb:

<% div_for player do %>
<%= player.FNAME %> <%= player.SURNAME %>
<% end %>

players_controller.rb:

def index
    @players = Player.all(:order => "FNAME")
    respond_to do |format|
      format.html
    end
end

Я хочу изменить index.html.erb, чтобы не было необходимости в частичном, но он не работает должным образом.

Пожалуйста, смотрите код ниже.

index.html.erb:

<% div_for @players do %>
<%= @player.FNAME %> <%= @player.SURNAME %>
<% end %>

NoMethodError в проигрывателях # index

Ответы [ 3 ]

3 голосов
/ 30 мая 2011

Это прямой перевод вашего кода:

<% @players.each do |player| %>
  <% div_for player do %>
    <%= player.FNAME %> <%= player.SURNAME %>
  <% end %>
<% end %>

render :partial для данной коллекции (@players в данном случае) будет проходить через коллекцию один за другим и отображать частичное для вас.

Но рендеринг коллекции также дает вам счетчик и шаблон распорки.

2 голосов
/ 30 мая 2011
<div>
    <% @players.each do |player| %>
    <p><%= player.FNAME %></p>
    <p><%= player.SURNAME %></p>
    <% end %>
</div>

К вашему сведению, это хорошая идея - держать это в частичном.

2 голосов
/ 30 мая 2011

По сути, div_for будет искать идентификатор, чтобы сделать:

 <div id="the_id">

Поскольку вы передаете массив, а не объект, он теряется.

Вы должны использовать content_tag для своих целей.

См. Документ здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-content_tag

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...