2012-02-28 11 views
0

それぞれの属性名を渡してコレクションの値を表示したいとします。属性名を使用してコレクション値を表示する

@mandatesは、アクティブレコードクエリの結果です。

@tabattributesには、以前にユーザーが選択した属性名の配列が含まれています。

以下のコードはフィールドの属性を示していますが、代わりにこれらのフィールドの値が必要です。

いくつかの構文を試しましたが、毎回エラーが発生します。

私のコードを変更するにはどうすればよいですか?

@manates.map do | f |

@ tabattributes.each {| att |私はあなたが右理解していれば「#{ATT}」}

エンド

答えて

0

@mandates属性ab、およびc@tabattributesを持つモデルを含む結果セットの場合は、配列%w{a b}である(つまり、あなたは@mandatesの各要素からabを抽出したい)、その後:

a = @mandates.map { |m| m.attributes.slice(*@tabattributes) } 

は、'a''b'というキーを持つ一連のハッシュを提供します。たとえば、次のようにあなたに、アレイのサブアレイを与えるだろう

@mandates.map { |m| m.attributes.slice(*@tabattributes).values } 

@tabattributes = %w{id created_at} 
slices = @mandates.map { |m| m.attributes.slice(*@tabattributes) } 
# slices is now like [ { 'id' => ..., 'created_at' => ... }, ... ] 

あなただけの値をしたいと、これはあなたのために働くだろう、おそらくその後、鍵を気にしない場合。最初の配列ハッシュはおそらくより簡単に動作するでしょう。

あなたは、データベースにアクセスする前に、あなたがこのような何かを使用して、データベース内の興味を持っているだけの列アウトスライスでき@mandatesで得ることができる場合:

@mandates = Mandate.select(@tabattributes) 
slices = @mandates.map(&:attributes) 
+0

感謝のあまり。これで、@ mandates.map {| m | m.attributes.slice(* @ tabattributes).values} – Marc

0

、あなたがelementsの配列を持っている、とあなたは、各要素のnameを含む配列を持つようにしたい、それはということですか?はいの場合は、array.map {|elem| elem.name}がそれを行う必要があります。同じことをする短い形式(array.map(&:name))があります。これがどのように機能しているか興味があれば、詳しく説明します。

関連する問題