这是我的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
答案 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,那么使用第二个例子。两者都有效。