产品.rb
class Product < ActiveRecord::Base
attr_accessible :description, :name
has_many :categorizations
has_many :categories, :through => :categorizations
validates :name, uniqueness: true
end
类别.rb
class Category < ActiveRecord::Base
attr_accessible :name
has_many :categorizations
has_many :products, :through => :categorizations
validates :name, uniqueness: true
end
分类.rb
class Categorization < ActiveRecord::Base
attr_accessible :category_id, :product_id # Should I leave these accessible?
belongs_to :product
belongs_to :category
end
这就是我在终端中尝试的:
> p1 = Product.create(name: "Product A", description: "Product A description")
> p1.categories
> []
> Category.all
> []
> p1.categories.create(:name => "Cat A")
> p1.categories.find(1).name
> ["Cat A"]
>
> p2 = Product.create(name: "Product B", description: "Product B description")
> p2.categories
> []
> p2.categories.update_attributes(:name => "Cat A")
我收到“update_attributes”的未定义方法错误。
- 如何在不在数据库中创建重复类别的情况下将产品分配给类别?(即由于上面已经创建了“Cat A”,我如何分配“p2”来拥有相同的类别,同时在数据库中只保留一条“Cat A”的记录?)
- 当我想搜索特定产品的类别时,当我输入“p.categories.name”时,我会返回模型“Category”的名称。如何将类别名称返回到数组中?
- 在 Web 表单中实现此功能的最佳方法是什么?