0

ビューには、プルダウン メニューのコレクションがあります (単純なフォーム gem を使用):

<%= f.input :item, :collection => MyModel::CATEGORY %>

コレクションは私のモデルに取り込まれます:

CATEGORY = [["Category", 5], ["Another", 4], ["This", 3], ["That", 2], ["Foo", 1]]

再作成するのではなく、コントローラーでも使用したいと思います。

@category = []
@category << ProductDevelopment::CATEGORY

私が本当に欲しいのは、次のように入力された配列です。

@category[1] = "Foo"
@category[2] = "That"
@category[3] = "This"
@category[4] = "Another"
@category[5] = "Category"

検索しましたが、これを行うための適切な構文が見つからないようです。ご協力いただきありがとうございます。

4

4 に答える 4

1

これをしないことをお勧めします。次のような列挙ジェムを使用します

于 2013-08-03T19:17:30.713 に答える
1

要素が要素を持つカテゴリを表す任意のCATEGORIES = [ ['a', 1], ['b', 2], ... ]順序で項目が与えられた場合、選択するデータ構造には 2 つの選択肢があります。[category, index]

  1. カテゴリをインデックスでArray検索できる場所

    この選択には注意してください。すぐに使用できるようにする必要がある0インデックスが必ずあるためです。

    # Mix things up for kicks
    categories = CATEGORIES.shuffle
    
    categories.inject([]){|memo,cat|  memo[cat[1]] = cat[0]; memo }
    # => [nil, 'a', 'b']
    

    nilカテゴリを削除することを選択した場合は、エントリについても心配する必要があります。を削除するとし['d', 4]ます。次のように表示されます。

    # => [nil, 'a', 'b', 'c', nil, 'e', ...]
    
  2. Hashカテゴリをキーで検索できる場所

    nilこれにより、配列を使用するときに発生する値に関する問題全体が回避されます。

    # Mix things up for kicks
    categories = CATEGORIES.shuffle
    categories.inject({}){ |memo,cat| memo.merge!({cat[1]=>cat[0]}) }
    # => {2=>'a', 1=>'b'}
    

個人的には をお勧めしHashますが、私が知る限り、ハッシュはほとんどの Rails フォーム ビルダーのコレクションでうまく機能します。

于 2013-08-03T19:54:30.730 に答える
0
@category = MyModel::CATEGORY.map{ |arr| arr[0] }

**未検証

于 2013-08-03T19:12:14.750 に答える