Rails 3 задает параметр принадлежности ассоциации

У меня есть приложение rails, которое отслеживает социальные данные. Пользователи смогут создавать группы и добавлять страницы (например, фан-страницы facebook) в свои группы по социальному идентификатору страницы. Поскольку пользователи потенциально могут добавлять страницу как кто-то другой, я настроил ее так, чтобы для каждого социального идентификатора была только одна страница. У меня также есть сводная таблица под названием «Категории», которая связывает страницы с группами и пользователями.

Мои модельные отношения настроены следующим образом:


User  
    has_many :groups

Group  
    belongs_to :user
    has_many :categorizations  
    has_many :pages, :through => :categorizations  

Page  
    has_many :categorizations  
    has_many :groups, :through => :categorizations

Categorization  
    belongs_to :group  
    belongs_to :page

Теперь, когда я создаю новую страницу и она сохраняется, она создает новую категорию. Проблема, с которой я сталкиваюсь, заключается в том, что в категоризации мне нужно вручную установить user_id. Я пробовал:


@page.categorizations.user_id

Но я получаю ошибку неопределенного метода user_id. Я могу подходить к этому с неправильного направления, но как мне установить user_id категоризации через объект страницы? Кроме того, если это имеет значение, я использую devise для управления своими функциями управления пользователями.
Буду очень признателен за любую помощь.
Спасибо.


person iangraham    schedule 31.12.2010    source источник


Ответы (2)


То, что вы пытаетесь сделать, это получить доступ к чему-то на несколько уровней глубже в «цепном» наборе отношений.

Чтобы получить доступ к экземпляру модели User для данной страницы, вам нужно получить ее категории, выбрать одну (как?), получить ее группу, а затем посмотреть, что такое user_id этой группы.

Концептуально у страницы будет много пользователей, которые могут отвечать за ее категоризацию.

Чтобы что-то произошло, вы можете произвольно выбрать первую категорию, а затем сделать что-то с ее пользователем:

cat = @page.categorizations.first
user = cat.group.user

Я не знаю, что вы имеете в виду под «настройкой» идентификатора пользователя для категоризации — у него нет пользователя, поэтому я не знаю, что вы потом захотите делать с этой информацией, извините!

person stef    schedule 31.12.2010
comment
Я даю вам ответ на последнее предложение. Вы правы, моя категоризация не требует связанного с ней user_id, так как я могу попасть на страницу через группу, которая принадлежит пользователю. Благодарность - person iangraham; 31.12.2010

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

Кроме того, вам не хватает противоположной ассоциации на странице:

Page
    belongs_to :user

Это позволяет вам вернуться к пользователю со страницы:

@page.user.id
person David Phillips    schedule 31.12.2010
comment
Извините за путаницу, я забыл добавить в группы отношения принадлежности_к. Я обновил свой вопрос, чтобы отразить это. В таблице My Pages нет столбца user_id, поскольку многие пользователи могут получить доступ к одним и тем же данным страницы через свои группы. Нужно ли мне добавлять has_many :users в мою модель Pages? - person iangraham; 31.12.2010