web-dev-qa-db-ja.com

Rails 3:f.select-options_for_select

Ruby Rails3アプリケーションのドロップメニュー付きのフォームがあります。これは、選択オプションの現在のコードです。

<%= f.select :phone_type, options_for_select(["Select One", "Cell", "Work", "Office", "Home", "Other"],:disabled => ["Select One"]), :class => 'genForm_dropBox' %>

私の理解では、これは誰かがページを開いたときのデフォルトオプションとして「1つを選択」する必要がありますが、他のオプションのいずれかを選択しないと、送信時にエラーが表示されます。

これは、SafariやChromeおよびIE7などのブラウザーで当てはまりますが、FirefoxとIE8では、1つを選択すると無効になるため、最初のオプションとして「セル」が表示されます。

デフォルトで「1つ選択」を表示したいのですが、フォームを送信するときに使用できないオプションとして表示します。これをコントローラーまたはモデルにスクリプト化する必要がありますか?または、これを間違った形式でコーディングしていますか?

31
mediarts

この機能を組み込むことを考えている人のために、モデルの最後から新しいアプローチを採用しました。ユーザーがエラーアラートを送信し、受信しないようにするには、すべてのフィールドに入力する必要があるため、「Submit One」オプションにデフォルト値なしを指定しました。次のコードを見て、どのようにそれを行ったかを確認できます。

<%= f.select :phone_type, options_for_select([["Select One", ""], "Cell", "Work", "Office", "Home", "Other"]), :class => 'genForm_dropBox' %>
32
mediarts

これは少しきれいです:

<%= f.select :phone_type, [ 'Cell', 'Work', 'Office', 'Home', 'Other' ], :Prompt => 'Select One' %>

:Prompt引数は、空の値を持つオプションを生成します。

20
danblaker

Rails 4では、このアプローチは私にとってうまく機能します。

<%= f.select :status, options_for_status, {}, Prompt: 'Select One' %>

その間、ヘルパーのオプションを定義して、混乱を避けるようにしました。

def options_for_status
  [
    ['First Option','first_option'],
    ['Second Option','second_option']
  ]
end
12
rb-

回答を提供してくださった皆さんに感謝します。

私が取り組んでいるプロジェクトにも同様のコードが必要でしたが、Ryan Burnetteが取ったアプローチがとても気に入りました。

これは、Rails 4.1.0。

<%= f.select :season, options_for_seasons, :Prompt => 'Select One' %>

次に、ヘルパーでオプションを定義しました。

def options_for_seasons
  ['Spring', 'Summer', 'Autumn', 'Winter']
end

一緒に行きました:Prompt => 'Select One'なぜなら、シーズンが以前に選択されていなかった場合にのみ、「1つ選択」オプションを編集フォームにリストしたかったからです。

4
Paul Phillips

["Select One"、 ""]を追加すると、編集画面に保存された値ではなく、常に「Select One」が表示されます。 Rails 3.1(2012 8月17日)

1
user1585163

<%= f.select :phone_type, options_for_select(["Cell", "Work", "Office", "Home", "Other"]), :Prompt => "Select One", :class => 'genForm_dropBox' %>になります

1
roxdurazo