我很抱歉发布了关于同一段代码的另一个问题,但我是一个新手来rails很痛苦。我的问题是,当数据库中存在默认值时,我想要选择第三个单选按钮。换句话说,我有三个按钮“true”,“false”和“both”。如果尚未选择任何内容或用户选择了“任一”按钮,我希望显示该选择。目前,如果用户选择“true”或“false”,则该选择将按预期正确反映。这只是选择的第三个选项,在保存或重新显示表单时不会反映出来。这是我的代码:
<div class="new-partner-form">
<%= form_for [:admin, matching_profile.partner, matching_profile], :html => {:id => "edit_profile", :multipart => true} do |f| %>
<div class="rounded-block semi-wide clear">
<h4>Military Service</h4>
<%= f.radio_button :served_in_us_army, false %>
<%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %>
<%= f.radio_button :served_in_us_army, true %>
<%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %>
<%= f.radio_button :served_in_us_army, " ", { :checked => (:served_in_us_army.nil? or :served_in_us_army.blank? ? true : false) } %>
<%= label :served_in_us_army, 'Either', {:style => 'display:inline'} %>
<%= f.error_message_on :served_in_us_army %>
</div>
编辑:我应该注意,还尝试了“:checked”选项,没有大括号。仍然没有运气。
不确定这是否是最佳解决方案,但这是我如何解决问题(我需要字段值而非列名称):
<div class="rounded-block semi-wide clear">
<h4>Military Service</h4>
<%= f.radio_button :served_in_us_army, false %>
<%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %>
<%= f.radio_button :served_in_us_army, true %>
<%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %>
<%= f.radio_button :served_in_us_army, " ", :checked => matching_profile.served_in_us_army.nil? %>
<%= label :served_in_us_army, "Either", {:style => 'display:inline'} %>
<%= f.error_message_on :served_in_us_army %>
</div>
答案 0 :(得分:1)
我建议你不要在视图中这样做。这是商业逻辑。
尝试在控制器中进行操作,或者在模型中更好。
在这种情况下,您可能希望控制器用于新的和(特别是)编辑操作,并可能为该信息创建实例变量。您可以从数据库中选择值,添加手动选项,使用if-then,以及正确设置对象的任何内容。
最重要的是(总是)尝试在模型级别解决此问题。您可以使用模型方法查看Military Service的现有值,然后返回有关该信息的信息 - 即使是布尔值很大的真/假值。只需确保在执行.save的
之前正确准备属性(以匹配数据库)