2011-09-11 32 views
1

我需要爲使用active_scaffold寶石的控制器執行此操作。我們有一個控制器,它看起來是這樣的:爲什麼Rails在佈局中呈現RJS模板?

class Admin::UsersController < ApplicationController 
    layout 'admin' 

    active_scaffold :users do |config| 
    config.search.columns = [:first_name, :last_name] 
    end 
end 

,當我們受到on Rails的2.3.10偉大的工作,但我們升級到Rails 3.0.10。作爲升級的一部分,我必須升級active_scaffold(目前從rails-3.0分支git://github.com/activescaffold/active_scaffold安裝)才能兼容。我們遇到的一個問題是搜索表格不起作用。我會在我的日誌文件中看到:

Rendered <snip>/gems/active_scaffold-25b3d724f35b/frontends/default/views/list.js.rjs within layouts/admin (923.5ms) 

請注意,它使用控制器中指定的佈局呈現RJS模板。這對我來說似乎是一種不合理的違約。不應該RJS模板渲染沒有佈局默認?無論如何,我將其固定爲:

class Admin::UsersController < ApplicationController 
    layout :admin_layout 

    private 

    def admin_layout 
    respond_to do |format| 
     format.js { false } 
     format.html { 'admin' } 
    end 
    end 
end 

解決了搜索和分頁問題。 (RJS模板現在無需佈局,因此瀏覽器可以執行生成的Javascript)。我想我的問題是,爲什麼我必須告訴Rails它不應該使用佈局呈現RJS模板?還有更好的解決方案嗎?這對我來說太過分了(這種糟糕的黑客行爲 - 將來會破壞的黑客行爲)。

+0

我不告訴Rails 3.0.9渲染JS w/o模板;是否有可能是active_scaffold中的東西? –

+0

是否有'layouts/admin.js'?這是奇怪的行爲。 Rails不應該在HTML佈局中呈現JS模板。如果有另一方面的JS佈局... – numbers1311407

+0

@Dave牛頓這就是我想的。它必須是active_scaffold中的內容。 @ numbers1311407不,沒有'layouts/admin.js'。我檢查了響應的內容,並將RJS模板封裝在HTML佈局中。 – David

回答

4

好吧,我想通了。在我的問題下@ numbers1311407的評論讓我檢查了佈局模板的名稱。這是layouts/admin.haml。使用Rails 2時,該佈局僅針對HTML請求呈現,但Rails 3適用於所有請求(因爲它沒有指定格式類型)。我將它重命名爲layouts/admin.html.haml,並且在我的控制器中使用了簡單的layout 'admin'(與我在問題中提到的黑客相反)。

所以這個問題的答案是:「爲什麼Rails在佈局中呈現RJS模板?」是佈局文件被命名爲適用於所有格式。

0

回答你的問題:
1. JS格式的Rails渲染器佈局沒有什麼魔力。這是因爲Rails默認使用任何模板呈現佈局,除非您明確告訴避免它。您可以查看文件中的Rails源代碼:actionpack/lib/action_controller/metal/renderers.rb以查看:js渲染器。

2.Try使用:

respond_to do |format| 
    format.js { render *your_any_options*, layout: false } 
end 
+0

這是不正確的;股票Rails不會用HTML佈局來佈局JS格式。 –