Rails 不使用 application.html.erb

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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

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

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

    类 WelcomeController

    布局“我的布局”

    ....

    结束

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

【讨论】:

【参考方案4】:

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

def action
  render :layout => false
end

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

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

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

【讨论】:

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

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

class MyCustomController < ApplicationController

【讨论】:

以上是关于Rails 不使用 application.html.erb的主要内容,如果未能解决你的问题,请参考以下文章

通过邮递员通过 API 使用 Rails 主动存储上传文件(.pdf、.jpg 等)? (不通过 Rails 视图)

Rails 不使用 application.html.erb

Rails 中模型的不正确复数

Rails '.js.erb' 不呈现部分

Rails 4 不使用 Remotipart 远程提交表单

Rails 4.2 不创建非消化资产