9

RoR初心者です。コントローラーのループで文字列を連結するために、グーグルで検索する方法を見つけようとしていました。

assets = Asset.where({ :current_status => ["active"] }).all
assets.each do |a|
      string = string + ":"+ a.movie_title 
end

属性「movie_title」を、コロンで区切られた文字列として連結したいと考えています。

しかし、私はエラーが発生します

undefined method `+' for nil:NilClass
4

4 に答える 4

19

最も簡単な方法はおそらく次のとおりです。

string = assets.collect(&:movie_title).join(':')

collect(&:movie_title)collect { |asset| asset.movie_title }は、映画のタイトルの配列を返すと同じです。join(':')で区切られた配列の値を使用して文字列を作成します:

于 2013-01-25T11:51:50.783 に答える
11

これを試して

assets = Asset.where({ :current_status => ["active"] }).all
string = ""
if assets.present?
 assets.each do |a|
  string = string + ":"+ a.movie_title 
 end
end
于 2013-01-25T11:51:44.020 に答える
10

なぜこれだけではないのですか:

"#{string} : #{a.movie_title}"

それらがnilの場合、あなたは得るでしょう" : "

于 2013-10-25T15:43:04.663 に答える
3

メソッドjoin( docs ) およびmap( docs ) が役立つ場合があります。

以下を試してください:

assets = Asset.where(current_status: ["active"]).all
assets.map(&:movie_title).join(':')
于 2013-01-25T11:57:58.307 に答える