2013-07-21 128 views
0

我有兩個控制器,和一個繼承了其他:爲什麼我的控制器渲染錯誤的視圖?

class FirstController < ApplicationController 
    ... 
    def show 
    ... 
    end 
end 

class SecondController < FirstController 
    ... 
    def show 
    ... 
    end 
end 

用於第一控制器的意見文件夾包含以下文件:

  • 視圖/第一/ show.html.erb
  • 視圖/第一/ show.js.erb

對於第二控制器的意見文件夾僅包含HTML文件:

  • 視圖/秒/ show.html.erb

渲染或重定向沒有被控制器的show方法中調用。

當我打電話SecondController#show作爲JS,我預計views/first/show.js.erb被渲染,但這不會發生。我得到迴應:Rendered second/show.html.erb

如果我刪除文件views/second/show.html.erb,那麼沒有問題,我得到的迴應Rendered first/show.js.erb。這是爲什麼發生?

我能做些什麼來以非顯式的方式調用父控制器的JS視圖,如渲染first/show

+0

你可以顯示你的'show'方法的代碼嗎?我懷疑'SecondController'中的'show'方法不會調用在'FirstController'中覆蓋的'show'方法。 – lurker

+0

我認爲這是因爲視圖在Rails中沒有以任何方式繼承,在我看來這是正確的行爲。 –

回答

0

這很奇怪。這只是在黑暗中拍攝的,但是如果在第二個控制器中明確告訴它要爲JS呈現哪個文件,會發生什麼?

class SecondController < FirstController 
    def show 
    respond_to do |format| 
     format.js { render "first/show.js" } 
     format.html 
    end 
    end 
end 
+0

然後它正確。但問題是,我不能這樣做,因爲我需要folowing行爲:如果second/show.js文件存在,然後它呈現,如果不是,首先/ show.js呈現 – chumakoff

+0

呃,你可能需要做一些真正hacky的東西像File.exists?(「#{Rails.root} /app/views/second.js.erb」) – bratsche

相關問題