У меня проблема с поиском правильного способа программирования динамических полей. Например: у меня есть две радиокнопки, и в зависимости от того, как пользователь выбирает одну радиокнопку, она расширяет форму различными полями.
Начальная форма:
- Радио кнопка: машина
- Радио кнопка: корабль
- Текстовое поле: имя
Если пользователь нажимает переключатель «машина», форма расширяется текстовыми полями, например, например. «engine», «color», и если пользователь выбирает переключатель «ship», форма расширяется текстовыми полями, такими как «длина», «вес». Атрибуты engine, color, length, weight являются полями в БД на столе машины.
Моя проблема в том, что произойдет, если проверка вернет ошибки. Как я могу использовать частичные для решения моей проблемы. Я пробовал 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 возвращает ошибки проверки?
Другое решение состоит в том, чтобы использовать remote_function (которая вызывает, например, check_fields) и partials (CODE POSTED ABOVE)! Благодаря этим решениям я получаю NameErros на 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!
Есть идеи?
спасибо заранее