为包含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吗?我将如何为这种情况编写测试?
答案 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中。如果您觉得自己正在做其他事情,可以为此创建一个新的控制器。