我是Ruby和HAML的新手,并尝试在主HAML文件中呈现以下部分内容。部分仅包含if条件。如果条件满足,我希望if条件将部分HAML代码的输出返回到主模板,如果不满足则返回任何内容。如果数组“attachments.each_file”为空(它没有按我的意愿呈现),则以下代码有效,但如果它不为空,则在尝试进入if条件的代码时会抛出错误。以下是相关的代码段:
错误消息:
LocalJumpError in Questions#show
Showing /questions/_attachments.html.haml where line #1 raised:
no block given (yield)
主要HAML模板代码:
= render "slashbias/questions/attachments", :attachments => @question.attachments, :editing => false
部分HAML代码:
- if !attachments.each_file.empty?
%dl#attachments_list
%dt.header Attached files:
%dd
-attachments.each_file do |key, file|
= link_to file.name, question_attachment_path(question.group, question, file, key)
-if editing
= link_to t("scaffold.destroy"), remove_attachment_question_path(question, :attach_id => key), :class => "remove_attachment_link"
答案 0 :(得分:2)
我相信第1行的attachments.each_file
期待一个阻止。在有0个文件的情况下它不会抛出错误,因为它永远不会尝试yield
任何东西。但是在有文件的情况下,each_file
正在尝试yield
文件到块并引发您看到的错误,因为没有块可以屈服。
您是否有其他方法可以测试是否有任何文件?像!attachments.files.empty?
或attachments.files.count > 0
?