【问题标题】:Rails where clause that need to find records through another tableRails where子句需要通过另一个表查找记录
【发布时间】:2014-10-29 00:28:48
【问题描述】:

我有 4 张桌子

  • 品牌
  • 电机
  • boat_motor_packages

一个品牌有很多电机

一个电机属于一个品牌

aboat_motor_package 属于_aboat and a motor

一艘船有_manyboat_motor_packages

我需要做两件事

  1. 列出每个boat_motor_package 的品牌
  2. 列出与每个品牌关联的boat_motor_packages

例如,

我有 1 条船

我有两个品牌——“evinrude”和“mercury”

我有 4 个电机,每个品牌下 2 个

这是我希望它在我的视图模板中的外观

无礼

  • 50HP
  • 60hp

  • 55马力
  • 65 马力

这是我的控制器操作

def show
  @boat = Boat.find(params[:id])
  packages = BoatMotorPackage.where(boat: @boat).all

  @package_motor_brands = packages.map { |p| p.motor.brand }
end

@package_motor_brands 为我提供了我需要的所有品牌

现在我需要找到与船和 motor.brand 相关联的电机包

我试图做这样的事情:

-@boat.motor_packages(brand).each do |motor_package|

并在 Boat 类中创建一个如下所示的方法:

def motor_packages(brand)
  BoatMotorPackage.where(["boat => ? and motor.brand => ?", self, brand])
end

但这不起作用。我收到一条错误消息,提示 motor.brand 列不存在。这是真的,因为它实际上是在电机台上。有谁知道这样做的正确方法吗?

这是我的观点,以防万一

- @package_motor_brands.each do |brand|
                              .col-xs-6.motor-group-container
                                %h5= brand.name
                                -@boat.motor_packages(brand).each do |motor_package|
                                .row
                                  .col-xs-12.motor-group
                                    %label.motor-group-name 
                                      %input#motorPackageRadios1{:name => "motorPackages", :type => "radio", :value => "#{motor_package.id}"}/
                                      ="#{motor_package.motor.hp.to_s}HP #{motor_package.motor.motor_type}"
                                    .motor-group-price="#{motor_package.price_in_cents}"

【问题讨论】:

    标签: ruby-on-rails activerecord associations


    【解决方案1】:

    如果您遵循 Rails 约定,那么保存您的 Motor 记录的表将被称为 motors(复数),而不是 motor(单数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多