3

Rails3.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を返すことがわかります。これは、私が望んでいることです。しかし、問題はそれでもラジオボタンが選択されないことです。inputタグをチェックすると、checked属性が「checked」に設定されていることがわかります。

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ラジオボタンでは、デフォルトのオプションをリストの最初に置き、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

params [:ad_type]がnilの場合、このスニペットはcheckedをfalseに設定します。それ以外の場合、params [:ad_type]がtrueに設定されていると、checkedが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 に答える
0

ドキュメントによると、checkedはオプションのハッシュパラメータではなく、単なるブール値です。

これは機能しませんでした(少なくともレール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 に答える