我有一個問題找到編程動態字段的正確方法。例如:我有兩個單選按鈕,取決於用戶如何選擇一個單選按鈕,它將擴展窗體的不同字段。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提前