2013-07-21 79 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

相关问题