为什么我的has_many模型中只有一个有效

时间:2013-09-26 20:26:55

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

我按照http://railscasts.com/episodes/17-habtm-checkboxes-revised?view=asciicast教程建立了一个has_many通过关系,当我尝试从一个模型访问信息时,它可以工作但不能从另一个模型访问。

我可以通过@product.category_ids@product.categories访问产品型号中的类别信息,但反之则不然。我无法从类别模型访问产品信息。使用@category.product_ids@category.products会向我显示错误NoMethodError: undefined method 'product_ids' for #<Category:0x007fa70d430e98>

Product.rb

class Product < ActiveRecord::Base
  attr_accessible  :category_ids

  has_many :categorizations
  has_many :categories, through: :categorizations
  accepts_nested_attributes_for :categorizations,  :allow_destroy => true
end

Category.rb

class Category < ActiveRecord::Base
  attr_accessible  :product_ids

  has_many :categorizations
  has_many :products, through: :categorizations
end

- 编辑 -

Schema.rb

ActiveRecord::Schema.define(:version => 20130926192205) do

  create_table "categories", :force => true do |t|
    t.string   "name"
    t.datetime "created_at",     :null => false
    t.datetime "updated_at",     :null => false
  end

  create_table "products", :force => true do |t|
    t.string   "name"
    t.datetime "created_at",          :null => false
    t.datetime "updated_at",          :null => false
  end

  create_table "categorization", :force => true do |t|
    t.integer  "product_id"
    t.integer  "category_id"
    t.datetime "created_at",     :null => false
    t.datetime "updated_at",     :null => false
  end

  add_index "categorization", ["product_id", "category_id"], :name => "index_categorization_on_product_id_and_category_id", :unique => true
  add_index "categorization", ["product_id"], :name => "index_categorization_on_product_id"
  add_index "categorization", ["category_id"], :name => "index_categorization_on_category_id"

end

1 个答案:

答案 0 :(得分:0)

要访问每个对象的记录,您应该能够:

@category.products

@product.categories

这将为您提供相关的对象。

product_ids不是某个类别的属性,并且没有accepts_attributes_for :products类似您的类别模型,因此删除attr_accessible :product_ids应该可以解决错误。