Rails:在视图中显示列表列表(即has_many,belongs_to关系)

时间:2012-06-22 15:18:21

标签: ruby-on-rails activerecord rspec capybara

为包含has_many / belongs_to关系的元素的数据模型实现视图的Rails方法是什么?

以下是我想以列表形式显示的模型: 驱动器

class Driver < ActiveRecord::Base
  ...
  has_many :cars
end

以下是应在每个驱动程序下列出的模型:

汽车

class Car < ActiveRecord::Base
  ...
  belongs_to :driver
end

我想显示各自车辆的司机列表。

这提出了两个问题:

1。如何在一个页面中最有效地列出两个?我的控制器和视图会是什么样子?如果我只是做

    @drivers = Driver.all

我似乎无法访问视图中的汽车。

2。如果我只列出驱动程序,并根据请求使用AJAX加载汽车,我会使用cars_controller和drivers_controller吗?我将如何为这种情况编写测试?

2 个答案:

答案 0 :(得分:1)

扩展你已有的东西:

//controller
  @drivers = Driver.all

  //view
  @drivers.each do |d|
   puts d.messages
   # OR
   d.messages.each do |m|
    puts m.title
   end
  end

同样可以与@cars = Car.all相反。

答案 1 :(得分:1)

1)如果您有路线,可以直接访问

的routes.rb

  resources :drivers do
    resources :cars
  end

查看可通行路线呼叫rake routes

然后,当您使用@drivers = Driver.all初始化所有驱动程序时,您可以访问每个驱动程序并执行driver.cars并使用.each访问每辆车

因此,在视图中它看起来像@drivers.each do |driver|,然后您可以执行driver.cars.each ..如果它为空,则可以使用driver.cars.build构建一个空的<{1}}

效率检查http://www.ibm.com/developerworks/web/library/wa-rails3/https://github.com/orslumen/record-cache

2)您可以使用驱动程序控制器,除非您想将其用于特定页面。

由于您可以从页面访问驱动程序的关系,并且您在技术上位于具有不同功能的驱动程序页面中,因此将其保留在drivers_controller中。如果您觉得自己正在做其他事情,可以为此创建一个新的控制器。