0

ビューからコントローラーにパラメーターを介して以下の情報を渡しています

parameters:{"Something"=>{"a" => "1", "b" => "0", "c" => "1", "d" => "0" #and so on}}

値として「1」を持つすべての文字にアクセスし、文字列に連結したいと考えています。

私は試した

Something.each do |key, value|
if(value == "1")
string = string + key
end 
end

nil.each を実行できず、配列が必要である可能性があるというエラーがスローされます。何かがハッシュであり、その中にいくつかのハッシュが含まれているように私には見えます。だから私は何かを初期化しました

Something = Hash.new { |Something, k| Something[k] = Hash.new }

しかし、私はまだ同じエラーが発生します。

4

1 に答える 1

1

paramsハッシュを操作するだけです。これはあなたが必要とすることをするはずです:

params["Something"].select {|k, v| v == "1"}.keys.reduce(:+)
  • select値を持つものだけにパラメータをフィルタリングします"1"
  • keysハッシュ内のすべてのキーを含む配列を返します
  • reduceすべての要素を連結操作 (+) で結合します

編集

「Extra」単語を連結して追加するには:

  • 各パラメータについて:

    params["Something"].select {|k, v| v == "1"}.keys.inject("") {|result, p| result += "Extra #{p}"}
    
  • 最初のパラメーターではなく、追加のパラメーターに対してのみ:

    params["Something"].select {|k, v| v == "1"}.keys.inject {|result, p| result += "Extra #{p}"}
    

詳細については、inject こちらを参照してください。

于 2012-07-17T19:15:44.797 に答える