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 参数中获取值吗?如果是这样,我如何设置初始默认值(当没有以前的搜索时)?非常感谢。

更新

我创建了一个辅助方法 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"))

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

4

4 回答 4

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
于 2014-03-22T00:03:43.843 回答
2

显然,为所有单选按钮添加选中属性会导致始终选择最后一个单选按钮。因此,如果参数与单选按钮匹配,我所做的就是添加一个选中的属性。

因此,对于我的示例,我只是使用了一个助手来生成适当的单选按钮,如下所示:

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

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

于 2012-08-28T17:04:57.733 回答
0

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

这没有用(至少在rails 4中):

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

它应该是:

= radio_button_tag(:ad_type, "free", ad_type_selected?("free"))
于 2013-12-06T15:14:55.573 回答
0

如果 params[:ad_type] 为 nil,此代码段将设置为 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
于 2012-08-28T14:22:43.703 回答