【问题标题】:Rails, has_many polymorphic association to one modelRails,has_many 与一个模型的多态关联
【发布时间】:2011-05-06 07:04:54
【问题描述】:

我想要一个模型(事件)与同一个用户模型具有多个多态 HABTM 关联。

它应该像这样工作:

事件 <:base> has_many :admin_users, :through => :event_users, :source => :userable, :source_type => '用户'
has_many :participating_users, :through => :event_users, :source => :userable, :source_type => '用户'
has_many :paid_users, :through => :event_users, :source => :userable, :source_type => '用户'
has_many :done_users, :through => :event_users, :source => :userable, :source_type => 'User'
end

类 EventUser 属于_to :userable, :polymorphic => true
属于_to:事件
结束

用户 has_many :event_users, :as => :userable
has_many :events, :through => :event_users
结束

这几乎行得通!问题是尽管 userable_type 为所有不同的关联获取类型“用户”。有办法解决吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many polymorphism


    【解决方案1】:

    恐怕你的联想看起来完全错误。首先,如果您在关联的一侧有一个“has_many”,您必须在另一侧有一个“belongs_to”。其次,我猜 done_user、admin_user 等都是从 User 继承而来的。我说的对吗?

    partinging_user、admin_user 等彼此有何不同?你真的需要每个类,你能用命名范围吗? 我建议您简化数据模型。 现在你的建模看起来很模糊。请详细说明。

    编辑

    老实说,我认为您的建模过于复杂。如果我是你,鉴于你对 *_users 的描述,我只会命名范围来检索该类型的用户。所以实际上

    class Event < ActiveRecord::Base
      has_many :event_users
      has_many :users, :through => :event_users
    end
    
    class User < ActiveRecord::Base
      has_many :event_users
      has_many :events, :through => :event_users
    end
    

    现在,在您的用户模型中编写命名范围以检索 *_user。 这是named_scopes 上的精彩截屏视频。

    【讨论】:

    • 对不起,我是 Rails 新手(但我喜欢它!)。所有 *_user 模型都只是用来告诉事件模型用户是否已付款,或者他/她是否完成了报告,或者他/她是否是事件的管理员。所以基本上它们是完全一样的,只是告诉事件模型关于特定用户。
    • 现在我已经更正了模型,所以它们几乎是正确的,除了 userable_type 设置为 User 而不是 ParticipatingUser
    • 但是,如果我使用 named_scopes,当我使用嵌套表单时,rails 会自动为我创建正确的条件吗?
    猜你喜欢
    • 2011-01-30
    • 2018-01-05
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多