2011-11-23 81 views
1

我张贴另一个问题关于这个同一段代码抱歉,但我这样一个新手到轨它的痛苦。我的问题是,我希望在数据库中存在默认值时选择第三个单选按钮。换句话说,我有三个按钮“真”,“假”和“任一”。如果没有选择任何东西,或者如果用户选择了“任一”按钮,我希望显示该选择。目前,如果用户选择“真”或“假”,那么该选择将被正确反映并如预期那样。这只是第三个被选中的选项,当表单被保存或再次提交时没有被反映出来。这里是我的代码:遇到的麻烦:检查radio_button - 轨道

<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> 

编辑:我要指出,也试过了:没有大括号“选中”选项。仍然没有运气。

不知道这是最好的解决办法,但这里是我是如何解决这个问题(我需要的字段值而不是列名):

<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

我建议你不这样做风景。这是商业逻辑。

试着在控制器中做到这一点,或者在模型中做得更好。

在这种情况下,你可能要为新的控制器和(特别是)的编辑操作,也许创建该信息的实例变量。您可以从数据库中选择值,添加手动选项,设置if-then,然后正确设置对象。

最重要的是(总是)是尝试在模型级解决这个问题。您可以使用模型方法来查看军事服务的现有值,然后返回有关信息 - 即使是布尔值很高的真/假值。只要确保准备做.save的前属性(S)正确(以匹配DB)

+0

恐怕我还是有点云里雾里这里。假设我将方法添加到返回值为:served_in_us_army的模型(大概我可以做一些类似'attr_accessor:served_in_us_army'的东西)。我是否仍然需要在视图中检查以查看该值,并根据该值确定是否检查该按钮? – Ramy