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 视图)