У меня проблема найти правильный способ программирования динамических полей. Например: у меня есть два переключателя, и в зависимости от того, как пользователь выбирает один переключатель, он расширяет форму различными полями.
Начальная форма: - Радиокнопка: автомобиль - Радиокнопка: корабль - Текстовое поле: имя
Если пользователь щелкает переключатель «автомобиль», форма расширяется текстовыми полями, например, например. «двигатель», «цвет», и если пользователь выбирает переключатель «корабль», форма расширяется текстовыми полями, такими как «длина», «вес». Атрибуты двигатель, цвет, длина, вес являются полями в БД на настольной машине.
Моя проблема в том, что произойдет, если проверка вернет ошибки. Как я могу использовать частичные, чтобы решить мою проблему. Я пробовал remote_function (для замены частей html), partials и rjs, но rails возвращает мне NameErrors!
Моя форма выглядит так:
<% form_for(@komplex_object, :url => some_url) do |f| %>
<%= f.error_messages %>
<% f.fields_for :machine do |machine_f| %>
<%= machine_f.radio_button :kind, 'car', :onclick => some_request_or_javascript, :checked => true -%> Car
<%= machine_f.radio_button :kind, 'ship', :onclick => some_request_or_javascript -%> Ship
<div id="dynamic_fields">
<% render :partial => 'car', :locals => { :f => machine_f } %>
</div>
<% end %>
<p><%= f.label :name %>
<%= f.text_field :name %></p>
...
<% end %>
Внимание: атрибуты машины вложены в форму komplex_object!
А вот части:
# _car.html.erb
<p><%= f.label :engine %>
<%= f.text_field :engine %></p>
<p><%= f.label :color %>
<%= f.text_field :color %></p>
# _ship.html.erb
<p><%= f.label :length %>
<%= f.text_field :length %></p>
<p><%= f.label :weight %>
<%= f.text_field :weight %></p>
В форме я написал «some_request_or_javascript», и здесь я тестирую различные решения, такие как javascript, который скрывает и показывает два разных div, содержащих поля автомобиля или корабля. Это решение запускается, но при отправке отправляются все хеш-поля, а не только те поля, которые пользователь выбрал с помощью переключателя. Вторая проблема: как распознать правильные поля, если submit возвращает ошибки проверки?
Другим решением является использование удаленной_функции (которая вызывает, например, check_fields) и партиалов (КОД, ОПИСАННЫЙ ВЫШЕ)! С помощью этих решений я получаю NameEros на rjs, потому что функция page.replace_html
# controller function that remote function calls
# Ajax update for the right fields
def check_fields
respond_to do |format|
format.js { render :action => params[:kind] }
end
end
# ship.js.rjs
page.replace 'dynamic_fields', :partial => 'ship'
не понимаю букву "f" в частичном _ship.html.erb!
Есть идеи? спасибо заранее