gpt4 book ai didi

ruby-on-rails - 如何向 Rails 的部分渲染查找添加 View 路径?

转载 作者:行者123 更新时间:2023-12-03 12:01:34 25 4
gpt4 key购买 nike

我想要以下目录结构:

views/
app1/
users/_user.html.erb
users/index.html.erb

app2/
users/index.html.erb

shared/
users/_user.html.erb
users/index.html.erb

在我看来,我会调用
# app1/users/index.html
<%= render :partial => "user" %>
# => /app1/users/_user.html.erb


# app2/users/index.html
<%= render :partial => "user" %>
# => /shared/users/_user.html.erb

所以基本上,我如何告诉 Rails 在它引发它缺少模板错误之前检查/app2/users 目录然后是共享目录?

更新

我解决了这个问题(正如 Senthil 建议的,使用 File.exist?
这是我的解决方案 - 欢迎提供反馈和建议
# application_helper.rb

# Checks for a partial in views/[vertical] before checking in views/shared
def partial_or_default(path_name, options={}, &block)
path_components = path_name.split("/")
file_name = path_components.pop
vertical_file_path = File.join(vertical}, path_components, file_name)
shared_file_path = File.join("shared", path_components, file_name)
full_vertical_file_path = File.join("#{Rails.root}/app/views/", "_#{vertical_file_path}.html.erb")
attempt_file_path = File.exist?(full_vertical_file_path) ? vertical_file_path : shared_file_path
render({:partial => attempt_file_path}.merge(options), &block)
end

最佳答案

Rails 中已经内置了一些东西,可以为您提供这种类型的“主题化”。它被称为 prepend_view_path .

http://api.rubyonrails.org/classes/ActionView/ViewPaths/ClassMethods.html#method-i-prepend_view_path

还有附加 View 路径 用于将路径添加到查找堆栈的末尾。

我已经成功地在生产中工作了:

 class ApplicationController < ActionController::Base
before_filter :prepend_view_paths

def prepend_view_paths
prepend_view_path "app/views/#{current_app_code}"
end
end

现在每个 Controller 将首先在“views/app1”(或任何你的动态名称)中查找与被调用的操作相对应的 View 。

它也很聪明,可以检查您要查找的文件的所有已定义路径,因此如果找不到,它会回滚到默认位置。

关于ruby-on-rails - 如何向 Rails 的部分渲染查找添加 View 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6081603/

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