我可以直接从routes.rb渲染布局,没有控制器吗?

时间:2014-07-27 14:49:09

标签: ruby-on-rails ruby layout ruby-on-rails-4 routing

我想为网站的管理员和公共部门设置一对风格指南。

每个都需要自己的布局,其中包含静态html和对erb partials的调用(因此静态页面不会剪切它)。我不需要一个控制器来提供这些页面,我不希望什么是有效的开发内容,使其余的代码混乱。这让我想知道是否有办法直接渲染布局。

免责声明:我很欣赏这不是我应该经常/永远做的事情,而且我知道有很多争论为什么这是一个坏主意。我对这是否可行感兴趣。

我是否可以直接从routes.rb呈现布局而无需通过控制器?

3 个答案:

答案 0 :(得分:7)

出于一些奇怪的原因,我想暂时渲染一个空白的JS文件,并且编写一个控制器对于这种黑客来说感觉太过分了。感谢@genkilabs的回答,我使用了这个3衬垫:

get 'analytics/some_file.js', to: -> (env) do
  [200, { 'Content-Type' => 'application/javascript' }, ['']]
end

答案 1 :(得分:2)

我想做一些非常愚蠢的事情,所以如果你也这样做,试试这个有效的例子。

match :movedpage, :to => proc { |env|
    if Rails.env.production?
        @remote_path = 'http://productionhost.com'
    elsif Rails.env.staging?
        @remote_path = 'http://staginghost.com'
    else
        @remote_path = 'http://localhost:3000'
    end
    [
        200,
        {"Content-Type" => "text/html"},
        [File.read("public/moved_page.html").gsub('@remote_path', @remote_path)]
    ]
}, :via => :all

其中,moving_page.html是一个静态页面,要求人们更新他们的书签,而@remote_path只需输入<a href="@remote_path">@remote_path</a>这样的链接。请注意,<%= %>将无效,因为您没有视图助手。

所以,有足够的绳索让自己陷入困境^ _ ^

答案 2 :(得分:0)

Actualy的答案是 NO ,没有控制器就无法做到。但是看一些简单的解决方法......

这不公平,但应该有效:

假设您已经实施了FooController任何逻辑。现在,您希望在不创建任何特殊控制器的情况下呈现anypage.html.erb。方法如下:


  1. 配置到静态页面的路线:

    get '/your/static/page', to: 'foo#anypage'

  2. 实施视图app/views/foo/anypage.html.erb


  3. 问题在于无法更改视图的路径。路径取决于您在路由中指定的控制器(示例中为foo)。另请注意,它将使用指定的FooController布局进行渲染。

    它应按照惯例运作,你可以阅读here


    更新

    我也找到了非常简单的解决方案here。对于这样的页面,使用ApplicationController似乎更合理。 (请注意您无需为其创建操作