1

醜いビューをきれいにして因数分解するために、私は次のことをしたいと思います:

1) ビューで:

= document_left_container do
 = document_information

2) 私のヘルパーで:

  def document_left_container(&block)
    render partial: "/document_left_container", locals: { custom_block: block }
  end

   def document_information
    render partial: "document_information"
  end

3) パーシャル:

document_left_container の場合:

.foo
  = custom_block.call

document_information の場合:

.bar

4) 期待される結果:

<div class='foo'>
  <div class='bar'>
  </div> 
</div>

5) 実際の結果:

<div class='foo'>
</div>
<div class='bar'>
</div>

自分のものを機能させる方法を知っている人はいますか?

前もって感謝します、

ベン

4

3 に答える 3

1

これが私がそれを乾いた状態に保つ方法です:

=content_for(:document_information) do
  .bar

.foo
  =yield(:document_information)

これにより、

<div class='foo'>
  <div class='bar'>
  </div> 
</div>
于 2012-07-13T02:33:44.470 に答える
0

私の現在の解決策は次のとおりです。

ヘルパー:

def document_left_container(&block)
  content_for :document_left_container do
    block.call
  end
  render partial: "/document_left_container"
end

部分的:

.foo
  = yield :document_left_container

残りは変わらず、同じ構造を維持したかったのです。

元のコードが失敗した理由を理解したいと思っています。

于 2012-07-13T07:39:04.260 に答える
0

基本的にrenderを呼び出してからrenderを再度呼び出していたため、元のコードが失敗したと思います。つまり、何かをスタックにプッシュしてから、別の何かをスタックにプッシュしました。これができれば、うまくいくと思います。(私はそれをテストしていませんが。)

def document_left_container(&block)
  capture_haml do 
    render partial: "/document_left_container", locals: { custom_block: block }
  end
end

 def document_information
  render partial: "document_information"
end
于 2012-07-13T18:40:27.067 に答える