我的用户通过habtm链接产品,该链接有效。
我想在用户模型和产品模型之间添加一个链接,以跟踪该产品的创建者(谁当然并不总是拥有该产品)
但是,当我在用户和产品中编写新链接时,该应用程序会搞砸,因为我无法区分创建者来自(很多)产品的所有者的产品。
你能帮帮我吗?这是我的模特:class Product < ActiveRecord::Base
belongs_to :group
has_and_belongs_to_many :authors
has_and_belongs_to_many :users # THIS IS OK (with appart table)
has_many :users, :as => creator # THIS LINE DOES NOT WORK AT THE MOMENT
end
class User < ActiveRecord::Base
has_and_belongs_to_many :products
belongs_to :user # THIS LINE DOES NOT WORK AT THE MOMENT
default_scope :order => "username ASC"
end
数据库没问题,我可以将user_id存储在我产品的创建者列下,但链接 product.creator.name 不起作用(因为模型不正确,我推测),我只能读取列中的user_id,但不能获取具有所有属性的用户对象。
rem: user.products 效果很好,但只有当我删除创建者的新链接时...
谢谢!
答案 0 :(得分:0)
有一个很好的宝石:https://github.com/spovich/userstamp
我在我的项目中使用它并且效果很好 - 您只需在模型中添加'stampable',然后以authomatic方式填充creator_id(和updater_id)。
答案 1 :(得分:0)
:as
语法用于多态关联 - 这不是您想要的。您对列名称的评论有点含糊不清,所以我假设您的user_id
表格中有一个products
列,该列是该产品的创建者的ID(我是只包括相关协会)......
class Product < ActiveRecord::Base
has_and_belongs_to_many :users
belongs_to :creator, :foreign_key => :user_id, :class_name => "User"
end
class User < ActiveRecord::Base
has_and_belongs_to_many :products
has_many :owned_products, :class_name => "Product"
end