2010-02-11 115 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 />') 
相关问题