Rails 3, правильный способ выполнения частичных операций?

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

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

 @users is an array of user emails
<% @users.each do |email| %>
   <%= render :partial => 'user/foobar' %>
<% end %>

user/foobar
<div id="user_<%= email %>>
   <div><%= email %></div>
</div>
  

РЕДАКТИРОВАТЬ: также захочется использовать частичное в файле js после добавления адреса электронной почты. Установил бы я экземпляр после создания в @user или что-то еще?

Ответ №1:

Вам не нужно использовать each . Вы можете использовать :collection опцию:

 <%= render :partial => "user/foobar", :collection => @users %>
  

В user/_foobar.html.erb частичном (ниже автоматически созданная локальная переменная foobar будет содержать текущий экземпляр элемента из @users коллекции):

 <div id="user_<%= foobar %>>
   <div><%= user %></div>
</div>
  

Локальная переменная названа в честь имени частичной операции. Смотрите руководство здесь.

Комментарии:

1. Быстрый вопрос, если бы у меня тогда был файл js, который хотел использовать частичную часть после действия (скажем, добавления пользователя), установил бы я переменную экземпляра в @user или что-то еще?

2. В коде была ошибка, я ее исправил. Также добавлена ссылка на руководство по Rails.

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

Ответ №2:

попробуйте это:

 render :partial => 'user/foobar', :locals => {:email => email }
  

это передается в вашей локальной переменной ’email’ в качестве символа:email