2016-04-18 20 views
1

我使用的是引導框架,具有下面的代碼片段,我用了很多:HTML片段,在Rails的觀點重複

<div class="panel panel-default"> 
    <div class="panel-heading">...</div> 
    <div class="panel-body"> 
     ... 
    </div> 
</div> 

(代碼段會實際上更大,但我想開始小)

所以我想我會建立一個部分,並使用它,像這樣:

部分

<div class="panel panel-default"> 
    <div class="panel-heading"><%= title %></div> 
    <div class="panel-body"> 
     <%= yield %> 
    </div> 
</div> 

使用例如

<%= render partial: "panel", locals: { title: "Hello" } do %> 
    Testing 
<% end %> 

但是,這顯然是行不通的。我收到以下錯誤:

'nil' is not an ActiveModel-compatible object. It must implement :to_partial_path.

我在這裏做錯了什麼?我是否理解偏好錯誤?

+0

多少次迭代該部分? –

+0

不知道我理解你的問題。如果你問的是我多久使用它。我可能會使用它超過50次 –

+0

Dbugger,你能顯示部分的所有內容嗎? – Nobita

回答

0

爲了yield工作,我認爲你需要使用render :layout而不是/除了:partial

<%= render layout: "panel", locals: { title: "Hello" } do %> 
    Testing 
<% end %> 

擁有的PartialRenderer例子閱讀更多信息,你想

+0

出於某種原因,我感覺「渲染布局:」只是用來定義頁面的主要佈局,即頂層視圖。儘管看起來不太習慣,但您的解決方案似乎可行。謝謝! –

+0

佈局只是用於格式化的一些周圍的HTML。您可以將佈局添加到任何模板中的任何代碼塊,並且佈局可以根據需要儘可能長/短。 [PartialRenderer文檔](http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html)有一些很好的例子。 – Matt