我有三个型号。其中两个通过has_and_belongs_to_many
关联与相应的联接表相关联,另一个与has_many
关联相关联。
class Item < ActiveRecord::Base
has_and_belongs_to_many :users
has_many :colors
end
class Color < ActivRecord::Base
belongs_to :item
end
class User < ActiveRecord::Base
has_and_belongs_to_many :items
end
我可以通过以下方式创建带有颜色的新项目:
@item = Item.new(name: "ball")
@item.users << @user
@item.save
@item.colors.create!(name: "blue")
该项目现已链接到@user
引用的用户。
但我认为必须有另一种方法为用户创建项目,例如我添加颜色的方式。
@user.item.create!(name: "car")
这不起作用,因为创建的项目的用户数组为空,而该项目现在不属于用户。
这种方法有什么问题?
答案 0 :(得分:0)
has_and_belongs_to_many。 (github )
相反,请使用带有直通标记的has_many:guides.rubyonrails.org...
类似的东西:
class Item < ActiveRecord::Base
has_many :user_items
has_many :users, through: :user_items # I can never think of a good name here
has_many :colors
has_many :item_colors, through: :colors
end
class Color < ActiveRecord::Base
has_many :item_colors
has_many :items, through: :item_colors
end
class User < ActiveRecord::Base
has_many :user_items
has_many :items, through: :user_items
end
class ItemColor < ActiveRecord::Base
belongs_to :item
belongs_to :color
end
class UserItem < ActiveRecord::Base
belongs_to :user
belongs_to :item
end
这可能看起来很复杂,但它会解决你的问题。另外,考虑许多项目共享相同颜色的情况,如果没有连接表,则按颜色对项目进行分类会更加困难。