带条件的默认范围

时间:2013-08-15 19:42:42

标签: ruby-on-rails-3 activerecord associations has-many-through

我正在使用rails 3.2.13和ruby 1.9.3。 我有三种型号: - 电子邮件 用户

我有两个用户角色=>出版商或订阅者

如果我想为订阅者和发布商提供电子邮件,我想知道如何在rails中执行此操作。 比如,我只是写 Email.find(####)。出版商 Email.find(####)。订户

没有为子和酒吧提供不同的表格。 此外,我在电子邮件和用户之间有很多关系。

另外,我想实现email.publishers.approved的默认范围?用户应该可以看到其他人应该被隐藏。

2 个答案:

答案 0 :(得分:1)

这样做的方法是在EmailUser模型中使用字段“角色”。

然后在电子邮件模型中添加以下两种方法:

def publishers
  self.users.where(:email_users=>{:role=>'Publishers'})
end

def subscribers
  self.users.where(:email_users=>{:role=>'Subscribers'})
end

答案 1 :(得分:1)

你可以这样做。

class Email < ActiveRecord::Base
   has_many :email_users
   has_many :users, :through => :email_users

   scope :approved, where(approved: true )
   scope :publishers, joins(:email_users => :user).where(:users => {:role => "publisher"})
   scope :subscribers, joins(:email_users => :user).where(:users => {:role => "subscriber"})


end

class EmailUser < ActiveRecord::Base
  belongs_to :email
  belongs_to :user
end

class User < ActiveRecord::Base
   has_many :email_users
   has_many :emails, :through => :email_users

   scope :publisher, where(:role => "publisher" )
   scope :subscriber, where(:role => "subscriber" )
end

然后,你可以简单地从这样的发布商那里获得批准的电子邮件。

Email.publishers.approved

并收到订阅者的电子邮件。

Email.subscribers

并从发布商那里收到电子邮件。

Email.publishers