div_for:NoMethodError

时间:2011-05-30 14:34:54

标签: ruby-on-rails

我正在尝试一个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 %>

玩家#index中的NoMethodError

3 个答案:

答案 0 :(得分:3)

这是您的代码的直接翻译:

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

render :partial给定一个集合(@players本案例)将逐个遍历集合并为您渲染部分集合。

但渲染一个集合也会给你一个计数器和间隔模板。

答案 1 :(得分:2)

基本上,div_for会寻找一个id来制作:

 <div id="the_id">

因为你传递了一个数组而不是一个对象,所以它已经丢失了。

您应该将content_tag用于您的目的。

请参阅此处的文档:http://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-content_tag

答案 2 :(得分:2)

<div>
    <% @players.each do |player| %>
    <p><%= player.FNAME %></p>
    <p><%= player.SURNAME %></p>
    <% end %>
</div>

仅供参考,将这些内容保留在部分内容中是一个好主意。