【问题标题】:ActiveRecord- Inner Join two SQL tables + Where clausesActiveRecord- 内连接两个 SQL 表 + Where 子句
【发布时间】:2015-12-03 03:16:20
【问题描述】:

我在 MySQL 中有两个表,我想根据表单的输入使用内部联接和多个 Where 子句调用 SQL 查询。我知道您可以通过 ActiveRecord::Base.connection 执行原始 SQL 查询,但我想了解如何使用 ActiveRecord 对象来执行此操作。两个 MySQL 表的架构如下:

Describe Options;

'VIN','varchar(45)','NO','PRI',NULL,''
'LEATHER','varchar(45)','YES','',NULL,''
'4WD','varchar(45)','YES','',NULL,''
'FOGLIGHTS','varchar(45)','YES','',NULL,''
'DVD','varchar(45)','YES','',NULL,''
'SURROUND','varchar(45)','YES','',NULL,''

Describe Inventory;
'VIN','varchar(30)','NO','PRI',NULL,''
'MAKE','varchar(30)','NO','',NULL,''
'MODEL','varchar(30)','NO','',NULL,''
'TYPE','varchar(50)','NO','',NULL,''

我想像这样执行一个 SQL 脚本:

Select Inventory.* from Inventory
INNER JOIN Options
ON Inventory.VIN = Options.VIN
WHERE Inventory.Make = "Toyota"
AND Options.Leather = "Yes";

我在 ActiveRecord 中的 Ruby 类是这样的:

 class Option < ActiveRecord::Base
    self.table_name = "Options"
 end

 class Inventory < ActiveRecord::Base
    self.table_name = "INVENTORY"
 end

再次,我知道我可以将查询作为脚本输入,但我想学习如何通过 Ruby 最佳实践来做到这一点

【问题讨论】:

    标签: mysql ruby-on-rails ruby activerecord


    【解决方案1】:

    你可以改成这样:

    Inventory.joins("INNER JOIN Options ON Inventory.VIN = Options.VIN")
             .where("Inventory.Make = ? AND Options.Leather = ?", "Toyota", "YES")
    

    在我看来,我会说你必须将你的表更改为 inventoriesoptions 模型 InventoryOption 所以你不需要在每个模型中使用 set_table_name 。这是关于 Rails 约定样式代码的。然后你就可以看到这样的模型了。

    class Inventory < ActiveRecord::Base
      has_many :options, foreign_key: "VIN"
    end
    
    class Option < ActiveRecord::Base
      belongs_to :inventory, foreign_key: "VIN"
    end
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      相关资源
      最近更新 更多