0

Rails 3.2.13 と Ruby 1.9.3 を使用しています。私は3つのモデルを持っています:- メールユーザー

ユーザー=>パブリッシャーまたはサブスクライバーの2つの役割があります

サブスクライバーとパブリッシャーからのメールが必要な場合、レールでそれを行う方法を知りたいです。たとえば、私は単に Email.find(####).publishers Email.find(####).subscribers と書きます。

サブとパブに別のテーブルを用意する必要はありません。また、メールとユーザーの間には多くの関係があります。

また、email.publishers.approved というデフォルトのスコープを達成したいですか? ユーザーに表示する必要がある他のものは非表示にする必要があります。

4

2 に答える 2

1

これを行う方法は、EmailUser モデルにフィールド「ロール」を含めることです。

次に、Email モデルに次の 2 つのメソッドを追加します。

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 に答える