Rails3无法正确呈现页面

时间:2012-12-05 02:15:40

标签: ruby-on-rails-3

我正在编写一个在子URL中运行的简单Rails3应用程序,除了一个问题外,它运行良好。如果我没有在任何控制器的“索引”方法的URL末尾添加“.html”扩展名,请求将返回一个空白页面。我请求哪个控制器无关紧要,“index”方法总是返回完全为空,包括我卷曲URL。我在每个控制器中都有一个“index.html.erb”文件,包含简单但完整的HTML,如果我在URL中包含“.html”扩展名,一切正常。以下是一些示例网址及其结果:

http://my.application.url/appname/pages -- returns a blank page.
http://my.application.url/appname/pages.html -- returns the correct HTML page
http://my.application.url/appname/pages/new -- returns the correct HTML form
http://my.application.url/appname/pages/1 -- returns the correct HTML page
http://my.application.url/appname/pages/1/edit -- returns the correct HTML form

我的路线文件看起来与此类似:

My::Application.routes.draw do
  scope "/appname" do
    resources :posts
    resources :pages
    root :to => 'home#index'
  end
end

我的控制器的适用部分与此类似:

class PagesController < ApplicationController
  def index
    @pages = Page.all
    respond_to do |format|
      format.html
    end
   end
...
end

正如我所说,索引方法是唯一遇到此问题的方法。我已经尝试了我能想到的一切,包括在application.rb中添加My::Application.default_url_options = {:format => "html"}(除非我需要从控制器执行redirect_to,否则它会起作用),而我却不知所措。该应用程序使用Thin作为代理Apache 1.3后面的应用程序服务器(遗憾的是我无法更改,但这似乎不是一个问题,因为直接命中Thin服务器会导致同样的问题)。任何想法都会非常感激。

1 个答案:

答案 0 :(得分:0)

所以,答案似乎是如果URL没有指定.html扩展名,那么应用程序将提供与控制器同名的资产(来自资产管道),至少在开发环境中运行时。一旦我删除了[controllername] .css.scss和[controllername] .js.coffee文件(两者都未使用),这些文件是我从assets文件夹创建控制器时自动生成的,应用程序正常工作。只是为了踢,我尝试将它们留在并运行rake assets:precompile,但行为一直存在,直到文件被实际删除。这似乎违反直觉,我正在考虑将此归为一个错误。