Как отобразить частичное в HAML, которое содержит только условный блок - PullRequest
0 голосов
/ 26 июня 2011

Я новичок в Ruby и HAML и пытаюсь отобразить следующий фрагмент внутри основного файла HAML.Частичное состоит только из условного оператора 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 Ответ

2 голосов
/ 26 июня 2011

Я думаю, attachments.each_file в строке 1 ожидает блок.Он не выдает ошибку в случае наличия 0 файлов, потому что он никогда не пытается yield ничего.Но в случае, если есть файлы, each_file пытается yield файлы в блок и поднимает ошибку, которую вы видите, потому что нет блока, чтобы уступить.

Есть другой способдля вас, чтобы проверить, есть ли какие-либо файлы?Что-то вроде !attachments.files.empty? или attachments.files.count > 0?

...