2013-01-25 53 views
4

我是RoR的新手。我試圖找到一種方法來在Controller中循環連接字符串。Ruby On Rails:循環中的連接字符串

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

我想連接屬性「movie_title」作爲冒號分隔的字符串。

,但我得到的錯誤

undefined method `+' for nil:NilClass 

回答

7

試試這個

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

它沒有工作,現在我得到錯誤未定義的方法'每個'爲零:NilClass – neeraj

+0

然後檢查'assets.present?'在循環前 – Raghuveer

+0

資產在那裏(我的意思是有兩個記錄),但仍然沒有解決你的答案 – neeraj

15

最簡單的方法可能是:

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

collect(&:movie_title)相同collect { |asset| asset.movie_title },它返回的數組電影片名。 join(':')使用由:分隔的數組創建一個字符串。

+0

Jakob:它工作正常,但我不得不寫上面的代碼循環。在循環中連接的方式是什麼? – neeraj

+0

對,上面的這一行是整個循環。如果您出於某種原因在循環內部需要它,請執行RVG建議的操作,並在添加到字符串之前初始化該字符串。 –

+0

@neeraj這個代碼面臨的問題是什麼?以及爲什麼你嚴格循環? –

3

方法joindocs)和mapdocs)可以幫助你。

嘗試以下操作:

assets = Asset.where(current_status: ["active"]).all 
assets.map(&:movie_title).join(':') 
5

爲什麼不只是這一點:

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

如果它們是零,你會得到" : "