gpt4 book ai didi

ruby-on-rails - Rails View 文件名中的自定义变量

转载 作者:行者123 更新时间:2023-12-04 17:24:31 25 4
gpt4 key购买 nike

默认情况下,Rails 可以在文件名中找到具有格式、区域设置和模板语言的 View (因此我可以创建 index.de.json.erb )

是否可以向 View 的文件名添加另一个自定义参数?

我想传递当前的子域,所以 http://foo.example.com/将呈现 index.foo.html.erb , 和 http://bar.example.com/将呈现 index.bar.html.erb (它们都带有 index.html.erb 后备)。

最佳答案

用于查找 View 的解析模式只能包含注册到 ActionView::LookupContext 的变量。类(class)。因此,第一步是使用 subdomain 注册一个新变量 ( LookupContext )类(class)。您应该在初始化程序中执行此操作:

ActionView::LookupContext.register_detail(:subdomain) do
['default_subdomain']
end

现在 LookupContext了解 subdomain ,它可以包含在解析模式中。有关更改解析模式的更多详细信息,请参阅 ActionView::FileSystemResolver documentation ,但基本上你应该在初始化程序中包含以下内容:
ActionController::Base.view_paths = ActionView::FileSystemResolver.new(
Rails.root.join('app', 'views'),
':prefix/:action{.:locale,}{.:subdomain,}{.:formats,}{.:handlers,}'
)

此模式最终传递给 Dir.glob (在 :* 变量被替换后)。全局模式 {.:subdomain,}意思是“要么 .:subdomain or nothing”,如果没有找到带有子域的文件,它提供回退到没有子域的 View 文件。

最后一步是更新您的 ApplicationController将子域传递给 LookupContext :
class ApplicationController < ActionController::Base
def details_for_lookup
{:subdomain => [request.subdomain]}
end
end

(这个答案主要是通过阅读源代码找到的,其中一些功能没有记录。它是用 Rails 3.2.5 测试的)

关于ruby-on-rails - Rails View 文件名中的自定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com