【问题标题】:ActiveRecord many_to_many with custom table and column name具有自定义表和列名的 ActiveRecord many_to_many
【发布时间】:2014-01-30 15:58:16
【问题描述】:

我正在尝试使用 ActiveRecord 在 Sinatra 中映射我的 MySQL dB。 db 不遵循 ActiveRecord 约定,因此我需要将所有添加属性的内容映射到我的类。

一对多和一对一关联一切正常,但我对 m 到 m 有问题。

我有一个名为“Eve_Articles”的文章表

我有一个名为“Eve_product”的产品平板电脑

我有一个名为“Eve_Articles_Product”的连接表,其中 tree_id 是文章 ID,prod_id 是产品 ID。

我创建模型:

class Article < ActiveRecord::Base
  self.inheritance_column = :_type_disabled
  has_one :image, class_name: 'Image', foreign_key: 'tree_id'
  has_and_belongs_to_many :products, 

end

class Product< ActiveRecord::Base
  self.inheritance_column = :_type_disabled
  has_and_belongs_to_many :articles, 
end

但我不知道如何使用自定义键定义自定义连接表。

【问题讨论】:

    标签: mysql ruby-on-rails ruby activerecord


    【解决方案1】:

    使用join_table 选项。此外,您还必须为ArticleProduct 设置table_name,因为它不遵循rails 约定

    您必须根据文档中的这一行在 habtm 调用之后设置表名。

    警告:如果您要覆盖任一类的表名,则 table_name 方法必须在任何下面声明 has_and_belongs_to_many 声明才能工作。

    class Article < ActiveRecord::Base 
      self.inheritance_column = :_type_disabled
      has_one :image, class_name: 'Image', foreign_key: 'tree_id'
      has_and_belongs_to_many :products, :join_table => "Eve_Articles_Product", :association_foreign_key => 'tree_id', :foreign_key => 'prod_id'
      self.table_name = "Eve_Products"
    end
    
    class Product< ActiveRecord::Base
      self.inheritance_column = :_type_disabled
      has_and_belongs_to_many :articles, :join_table => "Eve_Articles_Product", :association_foreign_key => "prod_id", :foreign_key => 'tree_id'
      self.table_name = "Eve_Articles"
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-10
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      相关资源
      最近更新 更多