Rails has_many:通过,未定义的方法

时间:2016-02-09 22:22:41

标签: mysql ruby-on-rails has-many-through

在rails中遇到多对多关系的问题。我有三个模态:

  1. 顺序
  2. 项目
  3. 分项
  4. 订单包含很多项目,反之亦然。

    查询Item.find(1).orders工作正常,但是当我尝试Order.find(1).items它返回:

    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(model)

    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
    

    不确定是否有干扰,但也有商店模式,商店有很多订单。

    感谢您的帮助和时间!

1 个答案:

答案 0 :(得分:0)

如果我查看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