0

Ruby 2.0でRails 4を実行しています

モデルで設定したキーと値のペアの配列を選択タグに入力しようとしています。しかし、鍵の入手方法が分からず困っています。これが私がこれまでに持っているものです:

モデル

class Store
    Colors = ['blue', 'green', 'red', 'yellow', 'orange', 'pink', 'purple', 'lime', 'magenta', 'teal']
    SearchParams = {'isbn' => 'ISBN', 'intitle' => 'Title', 'inauthor' => 'Author', 'inpublisher' => 'Publisher', 'subject' => 'Subject', 'lccn' => 'LCCN', 'oclc' => 'OCLC'}
end

コントローラ

def index
    @search_params = Store::SearchParams.map { |param| [param, param.key] }
end

注:.keyが存在しないことは承知しています - 私がやろうとしていることをよりよく伝えることを望んでいると付け加えました.

意見

<%= form_tag do %>
    <%= select_tag :param_name, @search_params, prompt: 'choose' %>
<% end %>

<option>それぞれの値をキーにして、ユーザーが値を確認できるようにしたいと思います。それが理にかなっていることを願っています。

4

3 に答える 3

2

通常options_for_select、 のオプションを提供するために を使用しますselect_tag。便利なことに、ハッシュを渡すoptions_for_selectことができ、正しいことを行います:

options_for_select(コンテナ、選択済み = nil)

コンテナー (ハッシュ、配列、列挙可能、ユーザーの型) を受け入れ、オプション タグの文字列を返します。[...]

問題はoptions_for_select、ハッシュのキーを人間が見るものにし、値をs のvalue属性にすること<option>です。ハッシュは逆になっていますがHash#invert、キーと値を反転させるために使用できます。

反転 → new_hash

hshの値をキーとして使用し、キーを値として使用して作成された新しいハッシュを返します。

したがって、コントローラーでこれを行うことができます:

@search_params = Store::SearchParams.invert

そして、これはERBで:

<%= select_tag :param_name, options_for_select(@search_params), prompt: 'choose' %>
于 2013-09-22T04:26:36.270 に答える
1

それはそれを行います:

def index
  @search_params = Store::SearchParams.map { |key, val| [val, key] }
end

UPD : も考慮Hash#invertしてください (@mu のおかげで短すぎます)

于 2013-09-22T04:25:58.533 に答える