Rails has_many :through, 未定义的方法
Rails has_many :through, undefined method
在处理 rails 中的多对多关系时遇到一些问题。我有三个模态:
- 订单
- 项目
- 逐项列出
一个订单有很多项目,反之亦然。
查询 Item.find(1).orders 工作正常,但是当我尝试 Order.find(1).items 它 returns:
NoMethodError: undefined method `items' for #<Order:0x007fcad3bb3258>
这是我的代码:
Schema.rb
create_table "itemizeds", force: :cascade do |t|
t.integer "item_id", limit: 4
t.integer "order_id", limit: 4
t.integer "quantity", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "items", force: :cascade do |t|
t.string "title", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "orders", force: :cascade do |t|
t.integer "customer_id", limit: 4
t.integer "store_id", limit: 4
t.integer "order_id", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.decimal "price", precision: 8, scale: 2
t.decimal "discount", precision: 8, scale: 2
end
Order.rb(型号)
class Order < ActiveRecord::Base
has_many :itemized
has_many :items, :through => :itemized
end
Item.rb(型号)
class Item < ActiveRecord::Base
has_many :itemized
has_many :orders, :through => :itemized
end
Itemized.rb(型号)
class Itemized < ActiveRecord::Base
belongs_to :item
belongs_to :order
end
不确定是否干扰,但还有一个商店模型,一个商店有很多订单。
感谢您的帮助和时间!
如果我查看 http://guides.rubyonrails.org/association_basics.html 中的多对多关联,我会看到
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, through: :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
end
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, through: :appointments
end
所以我想这是一个多元化的问题。请尝试 :through => :itemizeds
。
在处理 rails 中的多对多关系时遇到一些问题。我有三个模态:
- 订单
- 项目
- 逐项列出
一个订单有很多项目,反之亦然。
查询 Item.find(1).orders 工作正常,但是当我尝试 Order.find(1).items 它 returns:
NoMethodError: undefined method `items' for #<Order:0x007fcad3bb3258>
这是我的代码:
Schema.rb
create_table "itemizeds", force: :cascade do |t|
t.integer "item_id", limit: 4
t.integer "order_id", limit: 4
t.integer "quantity", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "items", force: :cascade do |t|
t.string "title", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "orders", force: :cascade do |t|
t.integer "customer_id", limit: 4
t.integer "store_id", limit: 4
t.integer "order_id", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.decimal "price", precision: 8, scale: 2
t.decimal "discount", precision: 8, scale: 2
end
Order.rb(型号)
class Order < ActiveRecord::Base
has_many :itemized
has_many :items, :through => :itemized
end
Item.rb(型号)
class Item < ActiveRecord::Base
has_many :itemized
has_many :orders, :through => :itemized
end
Itemized.rb(型号)
class Itemized < ActiveRecord::Base
belongs_to :item
belongs_to :order
end
不确定是否干扰,但还有一个商店模型,一个商店有很多订单。
感谢您的帮助和时间!
如果我查看 http://guides.rubyonrails.org/association_basics.html 中的多对多关联,我会看到
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, through: :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
end
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, through: :appointments
end
所以我想这是一个多元化的问题。请尝试 :through => :itemizeds
。