0

난 레일 3.2.13과 루비 1.9.3을 사용하고 있습니다. 나는 세 가지 모델을 데 : - 이메일 사용자조건이있는 기본 범위

내가 사용자를 위해이 개 역할을 => 발행인 또는 가입자 내가 가입자의 이메일을 갖고 싶어 내가 레일에 그것을 할 수있는 방법을 알고 싶어요

그리고 출판사로부터. 같은, 그냥 잠수함과 술집에 대한 다른 테이블을하지 않고 Email.find (####). 출판사 Email.find (####). 가입자

물품. 또한 이메일과 사용자간에 많은 관계가 있습니다.

또한 email.publishers.approved의 기본 범위를 달성하고 싶습니다. 다른 사용자가 숨겨야하는 사용자에게 표시되어야합니다.

+0

내가 얻은 것은 이메일, 사용자 및 EmailUser의 3 가지 모델이 있다는 것입니다. 이메일에는 EmailUser 모델을 통해 많은 사용자가 있습니다. 그렇지? – Bot

+0

예, 사용자의 역할 => 게시자 || 구독자 –

답변

1

이 작업을 수행하는 방법은 EmailUser 모델에서 '역할'필드를 사용하는 것입니다.

그리고 이메일 모델에서 다음 두 가지 방법을 추가

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

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

이것은 기본 범위 솔루션이 아니며, 승인되지 않은 게시자의 이메일을 어떻게 제한합니까? –

+0

DEFAULT 범위 란 무엇입니까? Rails는 메소드 사용을 권장합니다. 어쨌든 승인 된 것들을 필터링하기위한 다른 방법을 추가하십시오. 내가 이걸 주면 너는 그걸 쓸 줄 알았다. 시도 해봐. –

+0

실제로 DRY를 사용하여 한 곳에서 제한 사항을 작성하고 다른 곳에서 작성하지 않아도되므로 특정 유형의 이메일을 받도록 제한 할 수 있습니다. URL이 abc.com.users 인 경우/이메일/112 사용자는 113을 입력 할 수 있으며 방법을 사용하여 다른 이메일을 볼 수 있지만 기본 범위를 사용하는 경우 해당 이메일은 존재하지 않습니다 –

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 
+0

필요한 것입니까? – Bot