相同型号之间有两个has_many链接

时间:2011-06-28 15:45:58

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

我的用户通过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 效果很好,但只有当我删除创建者的新链接时...

谢谢!

2 个答案:

答案 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