当前位置:  开发笔记 > 编程语言 > 正文

如何在使用多对多关系时插入行

如何解决《如何在使用多对多关系时插入行》经验,为你挑选了1个好方法。

鉴于以下内容,我如何在我的数据库中插入行?(或者我应该在我的架构中纠正什么?)

楷模:

class Item < ActiveRecord::Base
    has_many                            :tran_items
    has_many :transactions, :through => :tran_items
end
class TranItem < ActiveRecord::Base
    belongs_to :item
    belongs_to :transaction
end
class Transaction < ActiveRecord::Base #answer: rename Transaction
    has_many                            :tran_items
    has_many :items, :through =>        :tran_items
end

架构:

create_table :items do |t|
  t.references :tran_items #answer: remove this line
  t.string     :name
end
create_table :tran_items do |t|
  t.belongs_to :items,  :transactions,  :null => false #answer: unpluralize
  t.integer    :quantity
end
create_table :transactions do |t|
  t.references :tran_items #answer: remove this line
  t.decimal    :profit
end

我试图插入记录几个小时,使用rails控制台来测试.



1> Mike Breen..:

(编辑:模型名称"交易"可能会因ActiveRecord :: Transactions而导致一些问题.有一个灯塔票.)

您的架构未正确设置."references"是"belongs_to"的别名.物品和交易不属于 trans_items,它们各有has_many trans_items(根据你的型号)

create_table :items do |t|
  t.string     :name
end
create_table :tran_items do |t|
  t.belongs_to :item, :transaction, :null    => false
  t.integer    :quantity
end
create_table :transactions do |t|
  t.decimal    :profit,  :default => 0
end

(编辑:make belongs_to singular)

您是否删除了数据库并重新运行迁移以构建新模式?

rake db:drop && rake db:create && rake db:migrate

这是我在控制台中得到的:

>> i = Item.create(:name => 'My Item')    
=> #
>> t = Transaction.create(:profit => 100)
=> #>
>> t.tran_items.create(:item => i)
=> #

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有