Ric*_*eck 9 ruby-on-rails ruby-on-rails-4
我已经为Rails 3找到了很多资源,但Rails 4没有:
为了保持干燥,我们有一个定义一些元标记的方法.我想在titleparam中包含布局:
#app/controllers/application_controller.rb
before_action :set_meta_tags
def set_meta_tags
title = (layout != "application") ? "#{layout} ::" : false
set_meta title: "#{layout} #{setting(:site, :title)}", description: setting(:site, :description)
end
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我不知道如何返回Rails 4中的当前布局 - 任何帮助将不胜感激!
Ric*_*eck 11
在Rails 5中,代码是:
controller.send :_layout, ["some_string_here"]
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它需要一个字符串在数组中,但这就是它为我工作的原因.我们的帮助文件如下所示:
def current_layout
layout = controller.send :_layout, ["test"]
return layout.inspect.split("/").last.gsub(/.haml/,"")
end
Run Code Online (Sandbox Code Playgroud)
小智 10
对于我在 Rails 6 中,current_layout方法看起来像这样
def current_layout
self.controller.send :_layout, self.lookup_context, []
end
Run Code Online (Sandbox Code Playgroud)
我相信数组是使用的格式列表。该方法_layout是动态构建的,我不确定它对formats参数的期望,但是我只用一个空数组就得到了我想要的行为希望这会有所帮助。
您可以添加以下helper method的ApplicationHelper:
def current_layout
(controller.send :_layout).inspect.split("/").last.gsub(/.html.erb/,"")
end
Run Code Online (Sandbox Code Playgroud)
你可以在set_meta_tags方法中相应地调用它.就像是,
def set_meta_tags
title = (current_layout != "application") ? "#{current_layout} ::" : false
set_meta title: "#{layout} #{setting(:site, :title)}", description: setting(:site, :description)
end
Run Code Online (Sandbox Code Playgroud)
注意:
.inspect 给我布局名称及其相对路径.
.split("/").last 将删除相对路径并仅返回布局名称(带扩展名).
.gsub(/.html.erb/)删除布局的扩展部分.您可能需要extension根据您使用的模板引擎进行调整,例如使用Haml时.html.haml.
我的解决方案
从与Kirti的聊天中,似乎我忘了提到我们手动设置layout是一个大问题.如果您手动设置布局,这将有效:
#app/helpers/application_helper.rb
def current_layout
self.send :_layout
end
def set_meta_tags
title = (current_layout != "application") ? "#{current_layout.titleize} :: " : ""
set_meta title: title + setting(:site, :title), description: setting(:site, :description)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3268 次 |
| 最近记录: |