在Rails中干我的has_many's

Mat*_*nde 2 ruby activerecord ruby-on-rails dry

我有一个模型类,其中包括:

class Group < ActiveRecord::Base
  has_many :subscriptions
  has_many :users, :through => :subscriptions

  has_many :admins, :through => :subscriptions, :source => :user, :conditions => "subscriptions.role = #{ROLES[:admin]}"
  has_many :subscribers, :through => :subscriptions, :source => :user, :conditions => "subscriptions.role >= #{ROLES[:subscriber]}"
  has_many :authors, :through => :subscriptions, :source => :user, :conditions => "subscriptions.role >= #{ROLES[:author]}"
  has_many :pending_subscribers, :through => :subscriptions, :source => :user, :conditions => "subscriptions.pending = true"
end
Run Code Online (Sandbox Code Playgroud)

:through => :subscriptions, :source => :user重复的次数困扰着我.我知道在路径文件中,你可以做到map.with_options.我的模特协会有类似的东西吗?

Rob*_*rco 10

with_options实际上是一个扩展的对象,所以你可以在你使用它ActiveRecord::Base,以及

with_options :through => :subscriptions, :source => :user do |obj|
  obj.has_many :admins, :conditions => "subscriptions.role = #{ROLES[:admin]}"
  obj.has_many :subscribers, :conditions => "subscriptions.role >= #{ROLES[:subscriber]}"
  obj.has_many :authors, :conditions => "subscriptions.role >= #{ROLES[:author]}"
  obj.has_many :pending_subscribers, :conditions => "subscriptions.pending = true"
end
Run Code Online (Sandbox Code Playgroud)