2011-06-26 7 views
0

RubyとHAMLが初めてで、メインのHAMLファイル内で以下の部分をレンダリングしようとしました。部分はif条件のみで構成されます。条件が満たされている場合、部分条件のHAMLコードの出力をメインテンプレートに戻し、条件が満たされていない場合は何も表示しません。次のコードは配列 "attachments.each_file"が空の場合(何も表示しません)、空でない場合はif条件のコードに進むときにエラーをスローします。ここでは、関連するコードスニペットは、次のとおりです。条件付きブロックのみを含むHAMLでpartialをレンダリングする方法

エラーメッセージ:

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" 

答えて

2

1行目のattachments.each_fileがブロックを期待していると思います。ファイルが0個の場合はエラーは発生しません。なぜなら、何も試みようとしないからです。yieldです。しかし、ファイルがある場合、each_fileはブロックにファイルをyieldにしようとしていますが、ブロックが生成されないために表示されているエラーが発生しています。

ファイルがあるかどうかをテストする別の方法はありますか? !attachments.files.empty?attachments.files.count > 0のようなものはありますか?

+0

私はあなたにスポットがあると思います。 each_fileにはブロックが必要です – jaydel

+0

そうです。私は何を考えていたのですか?「each_file」は何かのループのように聞こえる、私はよく知るべきです! :) – csuwldcat

関連する問題