【发布时间】:2016-03-05 12:41:02
【问题描述】:
如何在 Rails 中为每个操作呈现样式表?
由于我的应用程序不是标准的 CRUD 应用程序,因此我的控制器最终会得到一些自定义路由,这些路由需要非常不同的 CSS。
所以,我想知道,有没有办法在每次操作的基础上加载 css,但仍然利用资产管道?
谢谢
【问题讨论】:
标签: css ruby-on-rails asset-pipeline
如何在 Rails 中为每个操作呈现样式表?
由于我的应用程序不是标准的 CRUD 应用程序,因此我的控制器最终会得到一些自定义路由,这些路由需要非常不同的 CSS。
所以,我想知道,有没有办法在每次操作的基础上加载 css,但仍然利用资产管道?
谢谢
【问题讨论】:
标签: css ruby-on-rails asset-pipeline
在 stylesheets 目录中为您的每个控制器创建一个目录,并创建与您的操作相对应的 css 文件,然后将其放入您的布局文件中
<%= stylesheet_link_tag "#{params[:controller]}/#{params[:action]}" %>
【讨论】:
您可以使用控制器特定的资产。只需从 application.css 中删除 *= require_tree .。并通过<%= stylesheet_link_tag "style.css" %> 在其视图中包含样式表和特定于操作的样式表,但您必须通过Rails.application.config.assets.precompile = ["style.css"] 告诉rails 编译它们。你可以阅读更多关于它的信息here。这种方式我猜我们正在使用 Rails 资产管道,而不是默认方式。
【讨论】:
根据控制器路径和动作为body添加唯一的id:
助手:
def page_id
"#{controller_path.tr('/', '-')}-#{action_name}".dasherize
end
布局:
<body id="<%= page_id %>"...
然后将您的样式范围限定为它:
/users/index.scss
#users-index {
.. page specific styles here ..
}
【讨论】: