0

Я использую рельсы 3.2.13 и ruby ​​1.9.3. Я имею три модели: - Email Пользовательразмер по умолчанию с условием

У меня 2 ролей для пользователей => издатель или подписчик

Я хочу знать, как я могу это сделать в рельсах, если я хочу, чтобы сообщения электронной почты для абонентов и от издателей. Такие, как, я просто пишу Email.find (####). Издатели Email.find (####). Абонентов

Не имея другую таблицу для сабвуферов и пабах. Кроме того, у меня есть много отношений между электронной почтой и пользователем.

Кроме того, я хочу получить область по умолчанию, которую email.publishers.approved? должны быть видны другим пользователям, которые должны быть скрыты.

+0

Что я понимаю, так это то, что у вас есть 3 модели Email, User и EmailUser. У электронной почты есть много пользователей с помощью модели 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 scope? Rails поощряет использование методов. В любом случае добавьте еще один метод фильтрации утвержденных. Я думал, что если бы я дал это, ты напишешь об этом. попробуй. –

+0

Я действительно хочу использовать СУХО, поэтому я пишу ограничение в одном месте и не нужно писать его в каком-либо другом месте, так что он ограничивает получение определенного типа писем, если у меня есть url abc.com.users/emails/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

Смежные вопросы