3

Rails3、Ruby 1.9.2、および最新の HAML gem にアップグレードしました。このコードは以前は機能していました:


  = allowed? do
    = link_to('New', new_video_path)

allowed?が得られます0

私がすればそれは動作します:


  = allowed?{ link_to('New', new_video_path) }

何を与える?

4

3 に答える 3

1

このyieldの概念を実行して、適切にキャプチャしたいコンテンツを許可する最もクリーンな方法は次のとおりです。

= allowed? do
  - capture_haml do
    = link_to('New', new_video_path)

しかし、あなたの場合、別のヘルパー メソッドを作成してみませんか?

def allowed_link_to(*args, &block)
  opts = args.extract_options!
  if allowed? args.last
    link_to args.push(opts), &block
  else
    ''
  end
end

そして、次のように使用します。

= allowed_link_to('New', new_video_path)
于 2013-04-30T14:27:02.897 に答える
0

そもそもなぜその出力をエコーし​​ているのですか?あなたがしているべきです:

- allowed? do
  = link_to('New', new_video_path)

=一般に、ブロックで出力演算子()を使用することは決してありません。ブロックで出力されたものはブロックに戻されません。バッファに直接連結されます。このようなブロックを使用すると、コンテンツの順序が正しくないというエラーが発生する可能性があります。

于 2010-09-01T16:56:15.593 に答える
0

これは私が見つけるのに少し時間がかかりました、しかしこれはあなたがそれをする方法です:

def wrap_in_div(&block)
  "<div>#{capture_haml(&block)}</div>"
end

問題は、hamlがラックなどに送信する前に、すべてを独自の特別なバッファーに出力することです。したがって、最初にhamlにブロックを呼び出させ、それをバッファリングする必要があります。

于 2013-03-19T03:07:15.507 に答える