2013-06-03 11 views
5

Railsでオブジェクトのタイトルのリストを返そうとしていますが、title属性の代わりにオブジェクト全体が返されています。オブジェクトの配列と属性の返り値を返す

loeは、アーティクル(アーティクルという名前)のリストである属性を持つオブジェクトで、各アーティクル自体がtitleという属性を持つオブジェクトです。

<%= loe.article.each { |x| print x.title } %> 

私は現在、繰り返しを実行しようとしていますが、これは記事のリスト全体を返します。

答えて

20

使用Array#mapそれぞれにtitleメソッドを呼び出し、その結果を使用して新しい配列を作成する:

loe.article.map(&:title) 

を上記

1

loe.article.map {|x| x.title}おそらく?

1
loe.article.map{ |o| o.title } 
class LOE < ActiveRecord::Base 
    has_many :articles 
end 

class Article < ActiveRecord::Base 
    belongs_to :loe 
end 

loe.articles.select(:title).collect{|a| a.title} 
map

collectための略記でエイリアスされ、あなたはAREL上でselect(:fieldname)と呼んでそのフィールドだけを返すことができます。あなたはまだオブジェクトを取得しますが、それらは読み込み専用であり、返されたものが何であっても読み込まれるため、collectを実行する必要があるタイトルの配列を取得します。

2

<%=」のようなERBタグを使用すると、ブロック内にprintを呼び出しているという事実を上回って、その式の結果をERBに表示するように要求していることを意味します。 eachのようなEnumerableメソッドを呼び出すと、元の配列が返されます。これはあなたが見ているものです。

<%にタグを変更してください(=を削除してください)。

+0

質問に対する唯一の回答 –

関連する問題