提交表格后如何设置单选按钮的值?

时间:2012-08-28 14:10:03

标签: ruby-on-rails ruby-on-rails-3

我正在使用Rails 3.2。我有一个搜索表单,下面有单选按钮。它根据选择的单选按钮进行搜索。目前我认为这是:

  = radio_button_tag(:ad_type, "free")
  = label_tag(:ad_type_free, "free")
  = radio_button_tag(:ad_type, "paid")
  = label_tag(:ad_type_paid, "paid")
  = radio_button_tag(:ad_type, "featured")
  = label_tag(:ad_type_featured, "featured")

所以我的问题是这个,如何设置默认的单选按钮?我尝试过使用radio_button_tag(:ad_type, "free", :checked => true),但在提交表单后,它总是选择该单选按钮。我想要的是根据先前的请求选择值。我应该从url params获得价值吗?如果是这样,我如何设置初始默认值(如果没有先前的搜索)?非常感谢。

更新

我创建了一个帮助方法ad_type_selected?

  def ad_type_selected?(ad_type)
    selected_ad_type = params[:ad_type] || "free"
    (selected_ad_type == ad_type) ? true : false
  end

我认为我有这个:

  = radio_button_tag(:ad_type, "free", :checked => ad_type_selected?("free"))

但是,单选按钮仍未被选中。检查日志,我看到第一次调用helper返回true,其他调用false,这就是我想要的。但问题是它仍然没有选择单选按钮。如果我检查输入标签,我只能看到checked属性设置为“checked”。

4 个答案:

答案 0 :(得分:3)

我正在挖掘,但我刚刚遇到过这个问题。

<label class='checkbox-inline'>
  <%= radio_button_tag :option, :user, true %>
  Username
</label>
<label class='checkbox-inline'>
  <%= radio_button_tag :option, :email, params[:option] == 'email' ? true : false %>
  Email
</label>
<label class='checkbox-inline'>
  <%= radio_button_tag :option, :name, params[:option] == 'name' ? true : false %>
  Full Name
</label>

所以...这将默认设置第一个按钮(并且始终),但是如果选择了其他参数,它们将变为真。单选按钮将始终为您选择最后一个true按钮,因此只要您将默认选项放在列表中,设置为true,其余设置为:

params[:name_of_your_buttons] == 'button_value' ? true : false

答案 1 :(得分:2)

显然,为所有单选按钮添加checked属性会导致始终选择最后一个单选按钮。所以我所做的只是在params与单选按钮匹配时添加一个checked属性。

因此,对于我的示例,我只是使用帮助器生成相应的单选按钮,如下所示:

  def ad_type_radio_button(ad_type)
    selected_ad_type = params[:ad_type] || "free"

    if selected_ad_type == ad_type
      radio_button_tag(:ad_type, ad_type, :checked => true)
    else
      radio_button_tag(:ad_type, ad_type)
    end
  end

在我看来有这个:

= ad_type_radio_button("free")

我知道它远非优雅,但它现在表现正常。

答案 2 :(得分:0)

如果params [:ad_type]为零,则此代码段会将检查设置为false。否则,如果params [:ad_type]设置为true,它将设置为true。

radio_button_tag(:ad_type, "free", :checked => (params[:ad_type] == nil ? false : params[:ad_type]))

如果您还没有看到上面使用if / then / else的简写,那就是:

test-expression ? if_true_expression : if_false_expression

答案 3 :(得分:0)

根据docschecked不是选项哈希参数,它只是一个布尔值。

这没效果(至少在第4轨中):

= radio_button_tag(:ad_type, "free", :checked => ad_type_selected?("free"))

应该是:

= radio_button_tag(:ad_type, "free", ad_type_selected?("free"))