我在AJAX部分中有两个表单问题。 Rails 3.2.8使用带有Twitter Bootstrap和Postgresql的simple_form gem。
当我使用标准的simple_form语法时,如果在输入数据后返回编辑页面,则表单字段中的值将保持不变。但在我的AJAX部分中,我有两个问题。首先,我的表单中的值不会持久存在。其次,我的美味JQuery东西都没有,比如Datepicker。
我使用非常标准的方法来渲染AJAX部分:
在我的编辑视图中,我有通过AJAX呈现不同形式的YES / NO按钮:
<%= f.label "Yes/No question here?" %>
<%= link_to "Yes", privhealth_yes_divcase_path(:id => @divcase.id), :class => "btn btn-mini", remote: true %>
<%= link_to "No", privhealth_no_divcase_path(:id => @divcase.id), :class => "btn btn-mini", remote: true %>
routes.rb中:
resources :divcases do
member do
get 'privhealth_yes'
get 'privhealth_no'
end
end
回到编辑视图中,我还有一个条件,在初始页面加载时呈现正确的AJAX部分,具体取决于布尔值,使AJAX部分“粘滞”:
<% if @divcase.enrolled == true %>
<div id="privhealth"><%= render 'privhealth_yes' %></div>
<% elsif @divcase.enrolled == false %>
<div id="privhealth"><%= render 'privhealth_no' %></div>
<% elsif @divcase.enrolled.blank? %>
<div id="privhealth"></div>
<% end %>
divcases_controller.rb:
def show_privhealthyes
respond_to do | format |
format.js {render 'privhealth_yes.js'}
end
end
def show_privhealthno
respond_to do | format |
format.js {render 'privhealth_no.js'}
end
end
privhealth_yes.js.erb:
$( "#privhealth" ).html( "<%= escape_javascript(render('privhealth_yes', divcase: @divcase)) %>" );
privhealth_no.js.erb:
$( "#privhealth" ).html( "<%= escape_javascript(render('privhealth_no', divcase: @divcase)) %>" );
AJAX部分中出现问题。使用AJAX partials之外的标准simple_form语法,我的表单是粘性的 - 当我返回编辑页面时,这些值在这些表单中保持不变。此外,我的JQuery东西工作得很好。例如,以下工作正常在我的_form.html.erb上,在partials之外:
<%= f.input :boolean_attribute,
:collection => [['Yes', true], ['No', false]],
:label => "Is it true or false?",
:as => :radio_buttons,
:item_wrapper_class => 'inline' %>
但是在部分内容中,我必须执行以下操作才能使其“粘滞”并避免出现nil类错误:
<%= simple_fields_for(Divcase.new) do |f| %>
<% if @divcase.present? && (@divcase.boolean_attribute == true) %>
<%= f.input :boolean_attribute,
:collection => [['Yes', true], ['No', false]],
:label => "Is it true or false?",
:as => :radio_buttons,
:item_wrapper_class => 'inline',
:checked => true %>
<% elsif @divcase.present? && (@divcase.boolean_attribute == false) %>
<%= f.input :boolean_attribute,
:collection => [['Yes', true], ['No', false]],
:label => "Is it true or false?",
:as => :radio_buttons,
:item_wrapper_class => 'inline',
:checked => false %>
<% else %>
<%= f.input :boolean_attribute,
:collection => [['Yes', true], ['No', false]],
:label => "Is it true or false?",
:as => :radio_buttons,
:item_wrapper_class => 'inline' %>
<% end %>
<% end %>
非常不优雅。此外,此解决方法根本不适用于日期字段。它们默认回到当前日期。
关于持久性问题的任何想法? JQuery问题?谢谢你的帮助!