我有订单和物品表。我还有一个名为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
答案 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