2013-09-27 174 views
2

我有一個頁面,顯示我的褒獎在my_testimonials行動的褒獎控制器。錯誤的佈局渲染

這個動作的正確佈局是layouts/frame但我必須改變一些事情,因爲現在它被渲染layouts/application

下面是在控制器被指定的佈局:

layout "layouts/frame", only: [:my_testimonials] 
layout "layouts/shares", only: [:new] 

這裏是輸出控制檯:

Started GET "/my_testimonials/c4ca4238a0b923820dcc509a6f75849b" for 105.228.65.202 at 2013-09-27 07:40:49 +0000 
2013-09-27T07:40:49.470211+00:00 app[web.2]: Processing by TestimonialsController#my_testimonials as HTML 
2013-09-27T07:40:49.686047+00:00 app[web.2]: Rendered testimonials/_testimonial.html.erb (2.6ms) 
2013-09-27T07:40:49.686200+00:00 app[web.2]: Rendered testimonials/my_testimonials.html.erb within layouts/application (79.2ms) 

正在顯示褒獎,但顯示的佈局不正確。正如我所說,它昨天正在工作,所以我必須改變一些小細節或某種東西的順序。

+0

它可能不會有所作爲,但我通常會寫'layout'frame'',所以我認爲'layouts'文件夾是不需要的(你需要寫的越少越好)。 – nathanvda

+1

@nathandva,道歉,在發佈我的答案之前,我沒有看到您的評論。 –

+0

它沒有區別。我做了更改,但沒有改變佈局渲染。我現在認爲這是一個錯別字,但我看不到它。 – grabury

回答

2

我傾向於認爲layout()調用覆蓋了以前的調用。在這種情況下,最後的layout()呼叫您爲:new所做的呼叫覆蓋了:my_testimonials的呼叫。

您也可以choose the layout at runtime

layout :set_layout 

protected 

def set_layout 
    case action_name.to_sym 
    when :my_testimonials 
    'frame' 
    when :new 
    'shares' 
    else 
    'application' 
    end 
end 

或每個動作指定佈局:

def my_testimonials 
    respond_to do |format| 
    format.html { render :layout => 'frame' } 
    end 
end 

更新:

The code建議他們做覆蓋以前的電話。所以調用layout "layouts/shares", only: [:new]實質上是說使用「份額」:new和「應用程序」,否則。

+0

謝謝。這一切都再次運作! – grabury

+0

@spuggy:如果沒有其他相關問題,請不要忘記接受答案。 – kristinalim

0

Rails在'app/layouts /'文件夾中尋找佈局。請參閱Section 2.2.2

因此,當您指定'layouts/frame'時,rails會尋找'app/layouts/layouts/frame',它明顯無法找到。

更改您的佈局指令來執行以下操作:

layout "frame", only: [:my_testimonials] 
layout "shares", only: [:new] 
+0

我做了更改,但仍在使用應用程序佈局。我很難過。還有什麼我可以檢查? – grabury

0

變化

layout "layouts/frame" 

layout 'frame' 

我認爲這應該工作。

+0

我做了更改,但仍在使用應用程序佈局。我很難過。還有什麼我可以檢查? – grabury

+0

可能檢查您是否在視圖中呈現應用程序佈局,或者只是重新啓動應用程序。 – tommybernaciak