Rails渲染特定动作的css.erb文件时此行为是否正常?
Rails条件渲染下CSS文件命名要求的合理性解答
首先明确告诉你:这种情况完全是Rails的正常行为,背后是Rails资产管道的查找逻辑在起作用。
咱们来拆解一下原因:
- 当用户访问你的
searches/results路由时,不管你在results动作里用render指定了user_results还是post_results模板,Rails的资产系统始终会以**当前请求对应的控制器动作名称(也就是results)**作为默认的视图资产查找依据。 - 如果你把CSS文件命名成
user_results.css.erb或者post_results.css.erb,Rails在处理这个请求时,会默认去寻找和动作名匹配的资产文件,找不到自然就会报错。
如果想针对不同的渲染模板使用不同的CSS,有两个常用的解决办法:
- 在对应的模板文件里手动引入特定的CSS:比如在
user_results.html.erb顶部添加<%= stylesheet_link_tag 'user_results' %>,同时把你的样式文件命名为user_results.css.erb,这样就能绕开默认的动作名匹配逻辑。 - 把通用样式放在
results.css.erb里,针对特定模板的样式单独拆分出来,在对应模板里引入,这样既符合Rails的默认逻辑,又能保持样式的模块化。
内容的提问来源于stack exchange,提问作者Lee Eather
相关产品推荐
相关产品推荐

