【发布时间】:2012-06-08 07:11:36
【问题描述】:
保护特定的 /assets 文件免受路由中的直接访问或其他方式的影响?
我的资产里面有 fronted.css 和 backend.css 这个后端 css 文件我会禁用从 URL 直接访问,所以它只能从我的 backend_controller.rb 内部加载。
这有可能吗?
【问题讨论】:
标签: ruby-on-rails-3 ruby-on-rails-3.1 assets
保护特定的 /assets 文件免受路由中的直接访问或其他方式的影响?
我的资产里面有 fronted.css 和 backend.css 这个后端 css 文件我会禁用从 URL 直接访问,所以它只能从我的 backend_controller.rb 内部加载。
这有可能吗?
【问题讨论】:
标签: ruby-on-rails-3 ruby-on-rails-3.1 assets
在生产中,Rails 不控制资产,这适用于网络服务器。您只能通过从网站的公共部分中排除来隐藏它们。
您可以为前端和后端使用不同的布局,或者为自定义操作注入一些数据。
布局方式:
在 backend_controller.rb 中:
class BackendController...
layout 'backend' #you can use :only or :except parameter if you need
...
end
在 /your_app/app/assets/stylesheets 创建 backend.css 和文件夹 'backend',将所有后端样式表移动到 'backend' 文件夹中,然后在 backend.css 中插入:
/*
*= require_self
*= require_tree ./backend
*/
在 /your_app/app/views/layouts 文件 backend.html.erb 中创建。这是您的后端布局。插入那里<%= stylesheet_link_tag "backend" %>
*= require_tree .(此指令递归,包括 /your_app/app/assets/stylesheets 中的所有文件和您的 backend.css 中的所有文件)。
如果您需要某些文件或目录,请使用 *= require file_name_without_extension 或 *= require_tree ./directory_name
注入方式:
在 /your_app/app/views/layouts/application.html.erb 中
<!DOCTYPE html>
<html>
<head>
<%= stylesheet_link_tag "application", :media => "all" %>
...
<%= yield :my_custom_css %>
</head>
...
在您需要自定义样式表的任何文件中(例如 /your_app/app/views/categories/new.html.erb):
<% content_for :my_custom_css do %>
<%= stylesheet_link_tag 'backend' %>
<% end %>
*= require_tree .,否则您的自定义 css 文件将包含在应用程序布局中【讨论】: