0

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

我有 2 个用户角色 => 发布者或订阅者

如果我想为订阅者和发布者提供电子邮件,我想知道如何在 Rails 中做到这一点。比如,我只写 Email.find(####).publishers Email.find(####).subscribers

没有为 subs 和 pubs 设置不同的表。另外,我在电子邮件和用户之间有很多直通关系。

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

4

2 回答 2

1

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

然后在 Email 模型中添加以下两个方法:

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

def subscribers
  self.users.where(:email_users=>{:role=>'Subscribers'})
end
于 2013-08-16T05:25:04.903 回答
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
于 2013-08-16T08:36:51.777 回答