2010-02-11 72 views
1

是否有更緊湊的方式來編寫下面的代碼。我想擺脫flash [:add_run_error]爲零時分配空字符串的行。有沒有更簡潔的方式來編寫這個ROR代碼?

unless run.save 
    run.errors.each do |attr, msg| 
    flash[:add_run_error] += '<br/>' if flash[:add_run_error] 
    flash[:add_run_error] = '' unless flash[:add_run_error] 
    flash[:add_run_error] += "Invalid #{attr}. Follow examples below." 
    end 
end 
+0

另外,儘量避免使用+方法字符串。每次在Ruby中「加」字符串時,它都會生成一個新對象。用<<代替。或者像jdl所說的那樣做。 =) – Mereghost 2010-02-12 13:57:38

回答

8

您可以簡單地將您的錯誤的attr部分加入到一起。

flash[:add_run_error] = run.errors.map{|attr, msg| "Invalid #{attr}. Follow examples below."}.join('<br/>') 
+0

正是我在找什麼。 – 2010-02-11 23:16:16

+0

樂於助人。 – jdl 2010-02-12 00:35:06

0

我會做這種方式:

unless run.save 
    add_run_errors = [] 
    run.errors.each do |attr, msg| 
    add_run_errors << "Invalid #{attr}. Follow examples below." 
    end 
    flash[:add_run_error] = add_run_errors.join '<br />' 
end 

但它沒有首先<br /> - 你可以簡單地添加:

flash[:add_run_error] = '<br /'> + (add_run_errors.join '<br />') 
相關問題