如何在仅包含条件块的HAML中呈现部分

时间:2011-06-26 17:00:46

标签: ruby-on-rails ruby haml

我是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"

1 个答案:

答案 0 :(得分:2)

我相信第1行的attachments.each_file期待一个阻止。在有0个文件的情况下它不会抛出错误,因为它永远不会尝试yield任何东西。但是在有文件的情况下,each_file正在尝试yield文件到块并引发您看到的错误,因为没有块可以屈服。

您是否有其他方法可以测试是否有任何文件?像!attachments.files.empty?attachments.files.count > 0

之类的东西