1

選択ボックスを含む作業フォーム(モデルにバインドされていないため、を使用form_tag)があります。

関連するコードは次のとおりです。

select_tag 'language', "<option value='ar' selected>Arabic</option>
<option value='bg'>Bulgarian</option><option value='ca'>Catalan</option>
<option value='zh-CHS'>Chinese (Simplified)</option>
<option value='zh-CHT'>Chinese (Traditional)</option>
...
<option value='tr'>Turkish</option><option value='uk'>Ukrainian</option>
<option value='vi'>Vietnamese</option>".html_safe

お気づきのとおり、アラビア語がデフォルトのオプションで、リストには約 35 の言語があります。

ユーザーが言語を選択すると、(フォームが送信されたときに GET を介して) 値を個別に保存しますが、次回フォームに遭遇したときに、ユーザーが選択した言語をフォームが自動的に選択するようにしたいと思います。言い換えると:

  1. 「デフォルト」オプションはアラビア語です。
  2. ユーザーは言語としてフランス語を選択します。
  3. 次にフォームに遭遇したとき (たとえば、関連するページに戻ったとき)、アラビア語ではなくフランス語が選択されます。

これを達成するために私が考えた 1 つの方法はcase...when、属性が関連するオプションに追加される呼び出しselectedによるものでしたが、リストに 35 以上の言語があるため、これは少し面倒になる可能性があり、より良い/より整然とした方法。

何か案は?私はoptions_for_select解決策だと思っていますが、これが上記のコードにどのように組み込まれるかわかりませんか?

4

1 に答える 1

2

ハ!通常、私はこれを投稿してから10分以内に問題を解決することができました。を使用できますoptions_for_select。私の問題の解決策(これを偶然目にした同様のクエリを持つ人の場合)は次のとおりです。

select_tag 'language', 
options_for_select([
["Arabic", "ar"], 
["Bulgarian", "br"], 
["Catalan", "ca"],
....
], params[:get_language])

が設定されていない場合params[:get_language]、つまり以前にフォームが送信されていない場合は、どのオプションも選択されていないと思います(つまり、リストの最初のオプションがデフォルトの選択です)が、選択していません。これをテストしました(このフォームが初めて呼び出されるかどうかをチェックするコードが他にあります)。

皆さん、時間を無駄にしてすみません!

于 2012-09-15T20:48:40.527 に答える