2009-10-07 2 views
0

В настоящее время у меня есть 6-модель рубинового приложения rails, к которому я добавил authlogic. общая установкаRuby on Rails Пользовательская настройка

User :has_many categories, topics,messages 
Categories has_many topics, 
Topics has_many messages 

(С и соответствующие противоположные ссылки belongs_to).

Когда я пытаюсь получить доступ к current_user.categories.find (2), никаких результатов в контроллере не будет.

Кроме того, когда я пытаюсь запустить этот

current_user.topics.find(params[:topic_id]).messages.build 

Затем

@msg = current_user.messages.build(params[:message]) 
@msg.save 

Это не спасает user_id от has_many.

Все функции этой программы работали до директивы current_user были добавлены в.

Могу ли я сделать ошибку с установкой? Или с исполнением?

Поскольку связь не сохраняется после сборки, могу ли я потом добавить поле user_id в модель?

Извините за все вопросы, и спасибо заранее.

ответ

1

Я думаю, что ваш лучший выбор - пойти шаг за шагом. Что возвращает current_user? Соответствует ли идентификатор этого пользователя одному из ваших db? У этого пользователя есть категории? У любого из них есть идентификатор 2?

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

+1

Согласен, это очень много сцепления. Вы не представляете, какой из многих слоев ломается. Он также может помочь включить ведение журнала ActiveRecord, чтобы узнать, какие запросы генерируются. –

0

Спасибо Кайл. Я решил проблему, используя фильтр в модели, вместо того, чтобы использовать контроллер, чтобы назначить его для создания посредством ассоциации. Current_user просто возвращает запись текущего пользователя, используя authlogic. Мне нравится, когда проект лук, и может развернуть его после некоторой визуальной настройки, безопасности и еще css :). Обратные вызовы и фильтры поражают тем, что вы разрабатываете. Кроме того, если вам нужно получить переменную от application_controller к модели, используйте переменную ruby ​​для доллара, а не переменную экземпляра класса (at-sign). Rails настолько прост по сравнению с вашим приложением Php или sintra. Кроме того, сколько моделей используется для приложений rails?

+0

Если вы используете знаки доллара, вы идете по темной дороге. Знаки доллара используются для глобалов, а глобальные значения обычно означают, что вы тесно связаны со своими классами. Не уверен, что вы имеете в виду, сколько моделей используется для приложений Rails - у некоторых проектов, вероятно, есть несколько, у нас есть десятки, у других - сотни. Просто зависит от объема вашего приложения и зрелости вашей базы кода. Блог или Twitter требуют значительно меньше моделей, чем Mint.com или что-то в этом роде. – Kyle

+0

Я еще не хочу отлаживать большие приложения. Для меня достаточно 6 моделей. Если я не использую глобальный, как я могу получить текущий объект пользователя от контроллера к модели? Это единственный глобальный в моем приложении ... И на самом деле первый раз, когда я нуждался в рубине. – CodeJoust