我有一个问题找到编程动态字段的正确方法。例如:我有两个单选按钮,取决于用户如何选择一个单选按钮,它将扩展窗体的不同字段。Ruby on Rails嵌套动态字段
启动形式: - 单选按钮:汽车 - 单选按钮:船 - 文本字段:姓名
如果用户点击单选按钮“车”的形式获取与例如像文本字段延长。 “引擎”,“颜色”,并且如果用户选择单选按钮“船”,则表单将被扩展为具有诸如“长度”,“重量”的文本字段。属性引擎,颜色,长度,重量是台式机上数据库中的字段。
我的问题是,如果验证返回错误会发生什么。我如何使用partials来解决我的问题。我已尝试remote_function(以取代HTML部分),partials和rjs,但轨道返回我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包含汽车或船场。此解决方案运行,但在提交时发送所有散列字段,而不仅仅是用户使用单选按钮选择的这些字段。第二个问题:如果提交返回验证错误,如何识别正确的字段?
另一种解决方案是使用remote_function(即调用例如check_fields)和partials(CODE POSTED above)!有了这个解决方案,我得到的,因为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'
不明白在部分_ship.html.erb的“F”的RJS NameErros!
有什么想法? thx提前