пятница, 10 августа 2012 г.

Ruby on Rails и партиалы

Предположим имеем контроллер users_controller с екшином index, который выводит всех пользователей.
class UsersController < ApplicationController
  def index
    @users = User.all
  end
end
тогда вьюха (my_app_rails/app/views/users/index.html.erb) для него

All users

<% @users.each do |user| %>
  • <%= user.name %>
<% end %>
Вместо этого подхода можно использовать иной, с применением партиалов. Перепишем нашу вьюху.

All users

  • <% render @users %>
Теперь партиал (my_app_rails/app/views/users/_user.html.erb):
  • <%= user.name %>
Т.е. видно, что мы используем хелпер <% render %>, которому передаем в качестве аргумента массив @users. Рельсы "понимают" что необходимо найти партиал users в единичном числе, перебрать предложенный массив. Код
<% @users.each do |user| %>
............................
<% end %>
 
использовать нет необходимости. Рельсы автоматически создадут соответствующую переменную от массива @users ===> user, ее и надо использовать. Как говорится "Все для людей"))))))))) Партиал должен лежать в папке вьюх контроллера, если мы не имеем контроллера для партиала, но имеем, к примеру модель, все равно создаем папку(к примеру имеем модель Post, но для ее отображения используем иной контроллер, к примеру pages_controller, все равно создаем папку с партиалом my_app_rails/app/views/pages/_page.html.erb) !!!
my_app_rails\
.............app\
.................views\
.......................users\
.............................index.html.erb
............................._user.html.erb