【问题标题】:Rails not use application.html.erbRails 不使用 application.html.erb
【发布时间】:2012-10-24 22:23:15
【问题描述】:

我知道默认情况下,Rails 中的视图使用application.html.erb 中提供的模板。但是,有一种观点我不想使用application.html.erb 中提供的模板,而是在该视图本身中编写所有 HTML。有可能吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 view


    【解决方案1】:

    在控制器动作的最后,添加:

    render :layout => false
    

    【讨论】:

    • 该行应该在render "tree.html.erb"行之前还是之后?
    • 在同一行render "tree.html.erb", :layout => false
    • 但是,如果你的动作已经被调用tree,你可以跳过“tree.html.erb”部分,直接调用render :layout => false
    【解决方案2】:

    对于特定操作:

    class SomeController < ApplicationController
      def my_custom_action
        render layout: false
      end
    end
    

    【讨论】:

    • 如果您以与命名视图相同的方式命名控制器和操作,则无需指定 tree.html.erb。如果你这样做,请这样写:render 'tree.html.erb', layout: false
    【解决方案3】:

    您可以使用自定义布局实现同样的目的。

    例如对于WelcomeController

    1. app/views/layout/ 中创建一个名为welcome.html.erb 的自定义布局文件。 在那里写下你的布局代码(不要忘记yield)。由于 rails Convention over Configuration 功能,当 rails 渲染映射到 WelcomeController 的任何视图时,welcome.html.erb 将覆盖默认的 application.html.erb 布局。

    2. 如果您想以不同的方式命名自定义布局文件。 Rails 也允许您这样做。将您的布​​局文件命名为mylayout.html.erb。 在WelcomeController中,添加如下代码

      类 WelcomeController

      布局“我的布局”

      ....

      结束

    3. 如果您只想为特定操作自定义布局,请在操作的最后一行写上render layout: 'mylayout'

    【讨论】:

      【解决方案4】:

      当然,在您的操作中执行以下操作:

      def action
        render :layout => false
      end
      

      这假设您的控制器中还有其他需要布局的操作。否则,我会在控制器根目录中指定layout false

      如果您有多个不需要布局的操作,我相信您可以做到

      layout false, :only => [ :action1, :action2 ]
      

      【讨论】:

      • 感谢最后一点.. 以后可能会派上用场!
      【解决方案5】:

      你必须确保你的控制器继承自 ApplicationController

      class MyCustomController < ApplicationController
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        相关资源
        最近更新 更多