Динамические данные в частичном представлении рельсов - PullRequest
1 голос
/ 08 января 2012

Я только начал использовать Partials в своем приложении rails, в данный момент у меня есть следующий код в application.html.erb

<%= render 'categories/categorieslist' %>

Ссылка на _categorieslist.html.erb в моих папках / категориях / папке

На данный момент этот фрагмент содержит жестко закодированные гиперссылки

<ul class="unstyled">
    <li style="padding-bottom:5px"><a href="#">Item A&raquo;</a></li>
    <li style="padding-bottom:5px"><a href="#">Item B&raquo;</a></li>
</ul>

Моя цель - получить эти категории из базы данных, например,

<ul class="unstyled">
    <% @categories.each do |category| %>
        <li style="padding-bottom:5px"><a href="#"><%= category.name %> &raquo;    </a></li>
    <% end %>
</ul>

Я попытался добавить метод categorylist в контроллере категорий, например,

def categorieslist
 @categories = Category.all
  respond_to do |format|
     format.html # index.html.erb
     format.json { render json: @categories }
   end
  end

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

NoMethodError in Store#index

в строке <% @ateg.each do | category | %>

У меня вопрос, как мне перейти к частичному в файле application.html.erb, объекту категорий, который обычно получается из метода контроллера в контроллере категорий?

Любая помощь будет отличной.

Ответы [ 3 ]

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

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

Например (это частичный ярлык):

Ваше представление, из которого вывызовите частичный

<%= render 'categories/categorieslist', :all_categories => @categories %>

Ваши частичные категории / _categorieslist.html.erb (обратите внимание, что @ с переменной не существует)

<ul class="unstyled">
  <% all_categories.each do |category| %>
    <li style="padding-bottom:5px"><a href="#"><%= category.name %> &raquo;    </a></li>
  <% end %>
</ul>

Для получения дополнительной информации (и длинной версии),см. 3.4.4 Передача локальных переменных в руководствах по Rails.

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

Это не правильный способ сделать это, и ваш вопрос довольно запутанный.

Я бы сказал, что вам все еще нужно прочитать книгу по рельсам.Вы, кажется, все еще немного свежи

В любом случае, методы контроллера обычно представляют запросы http.И они вызываются в соответствии с тем, что определено в файле конфигурации / маршрутов.Представления (* .erb) обычно не вызывают методы контроллера.Если они это делают, они делают это с помощью ajax-запроса.

Данные передаются из действий в представления через переменные экземпляра контроллера.

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

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

Я бы использовал коллекцию для этого:

<%= render 'categories/categorieslist', :collection => @categories, :as => :category %>

Это отображает коллекцию предметов.В этом случае все категории.Вы также можете передать ему произвольное имя с помощью: as =>.

Затем в свой партиал вы включаете только то, что вы хотите, чтобы элементы в коллекции отображались:

<li style="padding-bottom:5px"><a href="#"><%= category.name %> &raquo; </a></li>

-ul- не включен, так как будет отображаться несколько раз.Вам нужно будет обернуть его вокруг тега рендеринга.

Результат совпадает с предложением @timbrandes, обрисованным в общих чертах, (ознакомьтесь с документами, на которые он ссылался).

Я слышал:Коллекция дает вам улучшения производительности.http://rails -bestpractices.com / сообщений / 38-потребительные рендер-коллекция-рельсы-3-когда-возможно

...