【问题标题】:How to fetch record from deep nested association?如何从深层嵌套关联中获取记录?
【发布时间】:2017-06-09 16:53:30
【问题描述】:

例如,我有这 3 个模型。板、卡车、司机。

Here's a sketch of what I have

卡车有很多司机,司机属于卡车。

然后我有一个董事会,董事会有卡车的集合。

我似乎想不通的是如何通过电路板和卡车在前端获取司机记录。

我有@boards = Board.all

但我不能这样做(在每个块内)board.truck.driver.first_name。我怎样才能接触到属于卡车的司机?

【问题讨论】:

    标签: ruby-on-rails activerecord rails-activerecord ruby-on-rails-5


    【解决方案1】:

    你做错了!由于卡车有很多司机,这不起作用board.truck.driver.first_name 你应该做board.truck.drivers 并像下面这样循环遍历它

    <% board.truck.drivers.each do |driver| %>
      <%= driver.first_name %>
    <% end %>
    

    【讨论】:

    • 我更喜欢这种方法,我需要向卡车的所有司机展示。谢谢。
    【解决方案2】:

    根据你提到的,卡车有很多司机。这意味着每辆卡车将有一个驱动器数组。尝试执行board.truck.drivers.first.first_name 之类的操作(假设您想要第一个也是目前唯一的驱动程序)。

    【讨论】:

    • 是的!就是这样。我缺少的是您必须致电.first 才能实际获取记录的理解?谢谢你的回答。
    • 如果您需要根据数据库字段选择要显示的驱动程序,也可以在.first 之前执行.where()
    【解决方案3】:

    你也可以定义一个直通关联,这样board.drivers就会变成一个有效的集合

    Class Board
      has_many :trucks
      has_many :drivers, through: :trucks
    

    详情请见ActiveRecord::Associations

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 2015-10-16
      相关资源
      最近更新 更多