Как правильно определить частичную часть приложения и ее переменные в рельсах? - PullRequest
0 голосов
/ 15 января 2012

Я создаю приложение rails с несколькими моделями, одна из которых - Items.

Items содержит краткий список продуктов и вспомогательную информацию.

Мне нужно отобразить этоинформация на каждой странице приложения.

В своих представлениях я добавил

<%= render @items %>

, а затем добавил частичный 'items / _item.html.erb'

Теперь, чтобы все это заработало, мне также нужно определить переменную

@items = Item.all

Мой вопрос: как правильно определить эту переменную?Я мог бы добавить эту строку в каждое представление для каждого контроллера, но это не кажется СУХОЙ.

Должен ли я определять это в контроллере приложения?Если так, это вызовет какие-либо проблемы, если я также хочу сохранить доступ к странице индекса Предметов?

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

Спасибо!

Ответы [ 3 ]

3 голосов
/ 15 января 2012

Определенно не следует вызывать базу данных из представления.

Вы можете создать закрытый метод внутри контроллера приложения и использовать его в качестве before_filter для всех контроллеров, где требуется коллекция @items.Скорее всего, вам следует настроить действия, в которые следует вводить @items, например:

before_filter :load_items, :only => [:show, :edit, update]
1 голос
/ 15 января 2012

Если вам нужно что-то отобразить, вам следует подумать о том, чтобы сделать это в контроллере приложения, а не во всех различных контроллерах, и в тех частях представления, которые вы можете выполнять в макетах (поскольку это часто встречается в приложении). У вас может быть партиал в той же папке (т.е. макеты), и вызывать его в представлении макетов как

<%= render :partial => 'partial_name' %>

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

0 голосов
/ 15 января 2012

Я думаю, что проще всего создать новый фрагмент (скажем, мы называем его "items_box"). В вашем items/_items_box.html.erb вы определяете @items как Item.all и предоставляете любой необходимый код рендеринга. Тогда все, что вам нужно сделать, это изменить <%= render @items %> на <%= render 'items/items_box' %>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...