【问题标题】:Rails: Show a list of lists (i.e. a has_many, belongs_to relation) in a viewRails:在视图中显示列表列表(即 has_many、belongs_to 关系)
【发布时间】:2012-06-22 15:18:21
【问题描述】:

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

这是我想以列表形式显示的模型: 司机

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 吗?我将如何为这种情况编写测试?

【问题讨论】:

    标签: ruby-on-rails activerecord rspec capybara


    【解决方案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 也可以反过来做。

    【讨论】:

    • 嗯...我的代码中一定缺少某些东西。我得到了#<0x007f9c5d4faf00>
    【解决方案2】:

    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 构建一个空的

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多