多态关联具有相同模型之间的多个has_many关联

时间:2016-08-21 00:44:00

标签: ruby-on-rails ruby activerecord polymorphism

我在使用三个模型(团队,用户和请求)之间解决问题时遇到了一些麻烦。

  • 团队有用户。
  • 用户可以创建请求。
  • 可以将请求分配给团队或用户。

以下是我目前拥有的模型:

class User < ActiveRecord::Base
  belongs_to :team
  has_many :created_requests, as: :creator, class_name: "Request"
  has_many :assigned_requests, class_name: "Request", as: :assignable, foreign_key: "assignable_id"
end

class Team < ActiveRecord::Base
  has_many :users
  has_many :assigned_requests, class_name: "Request", as: :assignable, foreign_key: "assignable_id"
end

class Request < ActiveRecord::Base
  belongs_to :creator, class_name: "User"
  belongs_to :assignable, polymorphic: true
end

大多数关系似乎都有效,但我在尝试查看用户的created_requests时遇到了问题。我得到的错误是“ActiveRecord :: StatementInvalid:PG :: UndefinedColumn:ERROR:column requests.creator_type不存在”

没有creator_type,因为users和created_requests之间的关系不是多态的 - 只有用户/团队和assigned_requests之间的关系是多态的。我如何在模型中指定它?

谢谢!

1 个答案:

答案 0 :(得分:2)

as: :creator模型中删除has_many :created_requests, as: :creator, class_name: "Request"的{​​{1}}。 User仅用于多态关联,如果它不是您所说的多态关联,那么您不应该在那里。