2012-02-23 92 views
2

我无法完全理解这一点。你会如何将这种多线失败转化为HAML?

原文:

<%= 
Shasta::CSV.generate do |csv| 
    csv << ["Customer", "Job Name", "Payment Date", "Amount", "Notes"] 

    for payment in @payments 
    csv << [ 
     payment.customer.name, 
     payment.jobs.map(&:name).join(" "), 
     I18n.l(payment.created_at, :format => :short_date), 
     number_to_currency(payment.amount), 
     payment.notes 
    ] 
    end 
end.html_safe 
%> 

HTML2HAML它转换为这一点,但它失败

= Shasta::CSV.generate do |csv|          | 
    csv << ["Customer", "Job Name", "Payment Date", "Amount", "Notes"] | 
    for payment in @payments           | 
     csv << [               | 
     payment.customer.name,           | 
     payment.jobs.map(&:name).join(" "),       | 
     I18n.l(payment.created_at, :format => :short_date),   | 
     number_to_currency(payment.amount),       | 
     payment.notes             | 
     ]                | 
    end                | 
    end.html_safe              | 
+1

当这样的事情发生,它基本上给你,你应该重构它变成一个辅助的提示。 – James 2012-02-23 21:28:40

回答

6

这并不完全回答你的问题,但它是一个痛苦编写多行haml语句,这就是为什么你应该把它移入帮助程序。

= some_descriptive_method_name @payments

def some_descriptive_method_name(payments) 
    Shasta::CSV.generate do |csv| 
    csv << ["Customer", "Job Name", "Payment Date", "Amount", "Notes"] 

    payments.each do |payment| 
     csv << [ 
     payment.customer.name, 
     payment.jobs.map(&:name).join(" "), 
     I18n.l(payment.created_at, :format => :short_date), 
     number_to_currency(payment.amount), 
     payment.notes 
     ] 
    end 
    end.html_safe 
end 
+3

“不要那样做”是一个非常好的答案。 – 2012-02-23 21:44:46

+0

好点!非常感谢James :) – Trip 2012-02-23 21:44:53

+0

是的,任何时候你需要在HAML中使用不止一行,这是一个标志,你需要一个辅助方法。 – tadman 2012-02-23 21:48:22