has_and_belongs_to_many模型创建需要吗?

时间:2014-05-14 17:49:34

标签: activerecord ruby-on-rails-4

我有订单和物品表。我还有一个名为orders_items的第三个表。我从以下链接(第二张图)http://www.tutorialspoint.com/ruby-on-rails/rails-models.htm

中学到了这一点

模型/ order.rb

class Order < ActiveRecord::Base
 has_and_belongs_to_many :items, through: :item_order
end

模型/ item.rb的

class Item < ActiveRecord::Base
 has_and_belongs_to_many :orders, through: :item_order
end

[orders_items]表格如下:

integer :order_id
integer :item_id

我是否必须创建要添加的models / order_item.rb文件:

belongs_to :order
belongs_to :item

如果是这样,它应该是什么样的正确命名格式? 模型文件[order_item.rb]的名称是否正确以区分它所引用的表?

models / order_item.rb ??

class OrdersItem ??? < ActiveRecord::Base
 belongs_to :order
 belongs_to :item
end

2 个答案:

答案 0 :(得分:2)

来自 API

  

联接表不应包含主键或模型   用它。您必须使用迁移手动生成连接表   比如这个

class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration
  def change
    create_table :developers_projects, id: false do |t|
      t.integer :developer_id
      t.integer :project_id
    end
  end
end
  

指定与另一个类的多对多关系。这个   通过中间连接表关联两个类。除非加入   table被明确指定为一个选项,它是使用的猜测   类名的词法顺序。所以开发者和。之间的联系   Project将提供默认的连接表名称“developers_projects”   因为“D”按字母顺序排在“P”之前

在您的情况下,联接表名称应为items_orders

答案 1 :(得分:0)

您的模型必须命名为OrderItem。而且你不需要在这个类中使用belongs_to。文件名(order_item.rb)是正确的。

我认为你需要这种关系来满足你的需求,除非订单也是一个项目

class Order < ActiveRecord::Base
  has_many :items
end

class Item < ActiveRecord::Base
    belongs_to :order
end