2017-02-19 10 views
0

Я чувствую, что это может быть очень простой вопрос, но я застрял более часа, поэтому я собираюсь бросить его здесь и посмотреть, что укусы.Избегайте добавления идентификатора пользователя к каждой модели

В моем приложении Rails у пользователей есть страницы и страницы с параграфами. Страницы имеют отношение to_to к пользователям, и мне нужно получить все абзацы, отмеченные как важные для конкретного пользователя.

Итак, вопрос заключается в том, что с использованием ранее существовавших отношений, которые абзацы имеют для страниц и страниц для пользователей, как я могу это сделать?

Я не могу сделать:

current_user.pages.paragraphs.where(important: true)

потому что current_user.pages возвращает коллекцию, так что ошибки, что не существует никакого способа абзацы на этой коллекции.

Так что я должен просто добавить поле пользователя в абзацы и установить там отношения? Так что я могу сделать:

current_user.paragraphs.where(important: true)

Или есть способ не делать этого? Спасибо за любую помощь!

ответ

1

На вашей модели User вы должны установить ассоциацию has_many :paragraphs, through: :pages. Это создаст User#paragraphs, и это позволит вам позвонить current_user.paragraphs.where(important: true), не создавая более сложный запрос.

Детали этого файла находятся в ActiveRecord::Associations.has_manydocuments here.

Ваши модели будут выглядеть примерно так:

class User < ApplicationRecord 
    ... 
    has_many :pages 
    has_many :paragraphs, through: :pages 
    ... 
end 

class Page < ApplicationRecord 
    ... 
    has_many :paragraphs 
    belongs_to :user 
    ... 
end 

class Paragraph < ApplicationRecord 
    ... 
    belongs_to :page 
    ... 
end 
+1

да да да, это самородок, благодаря –

+0

@PaulHarker вы Добро пожаловать! Рад был помочь :) –

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

  • Нет связанных вопросов^_^