每个动作的Rails scss样式表

时间:2015-12-01 14:38:46

标签: css ruby-on-rails asset-pipeline

如何在rails中为每个操作呈现样式表?

由于我的应用程序不是标准的CRUD应用程序,我的控制器最终会有一些需要非常不同的CSS的自定义路由。

所以,我想知道,有没有办法按行动加载css但仍然利用资产管道?

由于

3 个答案:

答案 0 :(得分:1)

为stylesheets目录中的每个控制器创建一个目录,并创建与您的操作对应的css文件,然后将其放在您的布局文件中

<%= stylesheet_link_tag "#{params[:controller]}/#{params[:action]}" %>

答案 1 :(得分:1)

您可以使用控制器特定资产。只需从application.css中删除*= require_tree .即可。并且<%= stylesheet_link_tag "style.css" %>在其视图中包含样式表操作特定样式表,但您必须告诉rails通过Rails.application.config.assets.precompile = ["style.css"]编译它们。您可以阅读更多相关信息here。这样我想我们正在使用rails资产管道而不是默认方式。

答案 2 :(得分:0)

根据控制器的路径和动作向主体添加唯一的ID:

助手:

function myFetch(url) {
    return fetch(url).catch(function(err) {
       let myError = new Error("Fetch operation failed on " + url);
       myError.url = url;
       throw myError;
    });
}

const goodUrl = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js';
const badUrl = 'https://ajax.googleapis77.com/ajax/libs/jquery/2.1.3/jquery.min.js';
Promise.all([
    myFetch(goodUrl),
    myFetch(badUrl), /* will fail */
    myFetch(goodUrl)
]).then(([response1, response2, response3]) => {
    console.log(response1);
    console.log(response2);
    console.log(response3);
}).catch((err) => {
    console.log(err);
});

布局:

  def page_id
    "#{controller_path.tr('/', '-')}-#{action_name}".dasherize
  end

然后将样式范围:

/users/index.scss

<body id="<%= page_id %>"...