遇到问题:检查了radio_button - rails

时间:2011-11-23 15:24:00

标签: ruby-on-rails-3 forms radio-button default radiobuttonlist

我很抱歉发布了关于同一段代码的另一个问题,但我是一个新手来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>

1 个答案:

答案 0 :(得分:1)

我建议你不要在视图中这样做。这是商业逻辑。

尝试在控制器中进行操作,或者在模型中更好。

在这种情况下,您可能希望控制器用于新的和(特别是)编辑操作,并可能为该信息创建实例变量。您可以从数据库中选择值,添加手动选项,使用if-then,以及正确设置对象的任何内容。

最重要的是(总是)尝试在模型级别解决此问题。您可以使用模型方法查看Military Service的现有值,然后返回有关该信息的信息 - 即使是布尔值很大的真/假值。只需确保在执行.save的

之前正确准备属性(以匹配数据库)