Формы пустые при рендеринге частичного при использовании коллекции объектов. Помогите! - PullRequest
0 голосов
/ 07 июня 2010

Хорошо, я знаю, что мой заголовок немного неясен, но лучше всего описывает проблему, с которой я столкнулся.

По сути, у меня есть список пользователей, и я хочу иметь возможность оперативно редактировать их информацию с помощью AJAX.

Поскольку пользователи отображаются в строках, я использую частичное для рендеринга данных и форм (которые первоначально будут скрыты ajax), однако, когда строки отображаются в настоящий момент, только последний элемент имеет свою форму поля заполнены.

Я подозреваю, что это как-то связано с тем, что все поля формы имеют одинаковые идентификаторы, и это сбивает с толку DOM. Но я не знаю, как сделать так, чтобы идентификаторы были уникальными.

Вот небольшой пример:

На мой взгляд:

<%= render :partial => 'shared/user', :collection => @users %>

Мое частичное (разбитое на форму) примечание, что я использую локальную переменную "user"

<% form_for user, :html => {:multipart => true} do |f| -%>
<%= f.label :name, "Name*" %>
<%= f.text_field :title, :class => "input" %>
<%= f.label :Address, "Address" %>
<%= f.text_field :address, :class => "input" %>
<%= f.label :description, "Description*" %>
<%= f.text_area :description, :class => "input" %>
<% end -%>

Когда визуализируется HTML, каждая форма имеет уникальный идентификатор (для идентификатора пользователя), но все элементы имеют одинаковый идентификатор, и только последняя пользовательская форма фактически заполняется значениями.

У кого-нибудь есть идеи? :)

Заранее спасибо!

1 Ответ

1 голос
/ 08 июня 2010

Хорошо, после некоторого обеда и восстановления некоторых клеток мозга (и с небольшой помощью от Google) я понял это.

При передаче коллекции в частичное, как это:

<%= render :partial => 'shared/user', :collection => @users %>

Rails создает переменную-счетчик, которую можно использовать для определения индекса для формы в виде "variable_counter":

<% form_for user, :index => user_counter, :html => {:multipart => true} do |f| -%>

Это добавляет номер индекса к идентификатору формы, а также ко всем идентификаторам полей и решает мою маленькую проблему. :)

Я надеюсь, что это поможет кому-то еще с этой проблемой. :)

...