Rails帮助循环有一个属于关联

时间:2011-03-04 23:15:40

标签: ruby-on-rails ruby-on-rails-3

这是我的kategori控制器显示动作:

  def show
    @kategori = Kategori.find(params[:id])
    @konkurrancer = @kategori.konkurrancer

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @kategori }
    end
  end

这是kategori view show file:

<% @konkurrancer.each do |vind| %>
      <td><%= vind.name %></td>
      <td>4 ud af 5</td>
      <td><%= number_to_currency(vind.vaerdi, :unit => "DKK", :separator => ".", :delimiter => ".", :format => "%n %u", :precision => 0) %></td>
      <td>2 min</td>
      <td>Nyhedsbrev</td>
      <td><%= vind.udtraekkes.strftime("%d %B") %></td>
   </tr>
<% end %>

我的kategori模特:

class Kategori < ActiveRecord::Base
has_one :konkurrancer
end

我的konkurrancer模型:

class Konkurrancer < ActiveRecord::Base
belongs_to :kategori
end

我希望显示与kategori模型有关联的所有konkurrancer

使用我的代码我收到以下错误: Kategoris中的NoMethodError#show

显示C:/Rails/konkurranceportalen/app/views/kategoris/show.html.erb第12行引发:

未定义的方法`每个'为“#”:Konkurrancer

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试遍历has_one关联。 has_one意味着 - 具有一个,因此您无法对此进行调用,因为只有一个。您可以执行以下操作之一来解决代码中的问题:

使用has_many关联:

class Kategori < ActiveRecord::Base
  has_many :konkurrancers
end

使用has_one关联并修改您的视图:

<tr>
  <td><%= @konkurrancer.name %></td>
  <td>4 ud af 5</td>
  <td><%= number_to_currency(@konkurrancer.vaerdi, :unit => "DKK", :separator => ".", :delimiter => ".", :format => "%n %u", :precision => 0) %></td>
  <td>2 min</td>
  <td>Nyhedsbrev</td>
  <td><%= @konkurrancer.udtraekkes.strftime("%d %B") %></td>
</tr>

您使用哪一个取决于您的数据模型。如果Kategori有许多Konkurrancers,那么使用第一个例子。如果Kategori有一个Konkurrancer,那么使用第二个例子。两者都有效。