2010-02-11 5 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

Кроме того, старайтесь избегать использования метода + строки. Каждый раз, когда строка «plussed» в Ruby, она генерирует новый объект. Вместо этого используйте <<. Или сделайте так, как сказал jdl. =) – Mereghost

ответ

8

Вы можете просто присоединиться к части своих ошибок вместе с attr.

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

Именно то, что я искал. –

+0

Счастливые помочь. – jdl

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 />')