2013-10-15 4 views
1

Im используя бутстраповских & рельсы и иметь модель пользователя и разместить model..users создавать сообщения (коллекции) ..Rails глобальной переменной

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

есть лучший способ сделать это?

Я делал это

def list 
    @user = User.find_by_username(params[:id]) 
    @collections = @user.collections 
end 

и

before_action :list 

в верхней части контроллера

Что самое семантический способ сделать это ??

+0

«это не сработало для контроллера приложений», что вы имеете в виду? любая ошибка? что нибудь? если действие/фильтр является чем-то «глобальным», которое должно выполняться для любого действия, оно должно идти как before_action/filter в ApplicationController – arieljuod

ответ

0

Я получил его на работу с этим в контроллере приложения

before_action :list 

private 

    def list 
    @collections = current_user.collections 
    end 

благодаря @arieljuod

2

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

Эти советы также могут быть полезны.

  1. Вы используете устройство? Или какой-то другой плагин аутентификации? Если это так, вы, скорее всего, будете иметь помощника current_user. Это позволит вам просто сделать @collections = current_user.collections
  2. Насколько это возможно, я рекомендую использовать более описательные имена для ваших действий и параметров. def fetch_list_collections может быть лучшим именем или вместо передачи параметра с именем id, возможно, ваш параметр должен быть назван username. Эти соглашения об именах становятся чрезвычайно важными как для других, которые могут смотреть на ваш код, так и на себя, если вы вернетесь к нему и пытаетесь запомнить то, что вы написали N месяцев назад.
  3. Действие вашего списка генерирует N + 1 запросов. Это означает, что вы ударяете базу данных несколько раз, когда вы должны сделать это только один раз. См. Руководство по направляющим. Вы также можете посмотреть, как избежать этого. Разработчик довольно хорошо документирован, и я готов поспорить, что есть что-то в вики, обсуждающем это.
  4. Возможно, вы захотите рассмотреть вопрос об ограничении, когда вы называете это действие - как минимум - отправкой запроса на обновление? Как насчет того, чтобы они вошли в систему? current_user может быть nil, и у вас будет ошибка при попытке вызвать метод collections на nil.

Не спешите изучать этот материал. Вам не обязательно изучать все это сразу, но я думал, что это может быть полезно.

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