在模型的A索引页面中显示属于模型A的模型B的值

时间:2011-12-27 20:49:45

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

INTRO

模型A

carname.rb

    class Carname < ActiveRecord::Base
        belongs_to :car
        has_many :carmodels, :dependent => :destroy
...

模型B

carmodel.rb

    class Carmodel < ActiveRecord::Base
      belongs_to :carname
      belongs_to :car
...

carname字段:id,name

carmodel字段:id,name,carname_id

问题:

我为前宝马添加了一个汽车名称,然后我可以为前3系列添加汽车模型并选择它属于宝马。在不同的视图中运行良好,但我希望它在carname的索引视图中显示carmodel,类似这样

在www.whateverdomain.com/carnames

BMW  
       3 series
       5 series
       7 series

Mercedes
       E class
       S class
       C class

我展示了卡通名,并不是什么大不了的事:

<% @carnames.each do |carname| %>
  <%= carname.name %>
<% end %>

但是我想不出如何为它添加模型nex。 在carmodels索引视图中,我设法显示每个carmodel,其carname是car_odel旁边的car_ode

<% @carmodels.each do |carmodel| %>
      <%= carmodel.name %>
      <%= carmodel.carname.name %>
      <%= link_to 'Edit', edit_carmodel_path(carmodel) %>
      <%= link_to "Delete", carmodel, :confirm => 'Are you sure?', :method => :delete %>
  <% end %>

所以在这个屏幕上的html看起来像

3 series | BMW
5 series | BMW
7 series | BMW
C class  | Mercedes
E class  | Mercedes
etc..

如果需要任何其他信息,我会分享。谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

在carnames / index.html.erb文件中尝试此代码:

<% @carnames.each do |carname| %>
    <h1><%= carname.name %></h1>
    <ul>
    <%- carname.carmodels.each do |carmodel| %>
        <li><%= carmodel.name %></li>
    <%- end %>
    </ul>
<% end %>

它会将每个车牌及其车型添加为无序列表。

编辑:如果要显示carmodel.name |你可以做的carname.name:

<% @carnames.each do |carname| %>
    <ul>
    <%- carname.carmodels.each do |carmodel| %>
        <li><%= carmodel.name %> | <%= carname.name %></li>
    <%- end %>
    </ul>
<% end %>

注意:为什么Carname属于汽车?将名称属性分配给Car类会不会更容易?