【问题标题】:Ruby on Rails 3 CSS only for certain Views (Devise)Ruby on Rails 3 CSS 仅适用于某些视图(设计)
【发布时间】:2013-09-09 12:52:26
【问题描述】:

我对 Ruby on Rails 很陌生,想将我的自定义 CSS 文件放入设计(注册视图)中。我将全局 CSS 放入 application.js(资产管道)中,并在我的

中放置了 2 个 Helper 函数

helpers/application_helper.rb

  def javascript(*files)
    content_for(:head_javascript) { javascript_include_tag(*files) }
  end

  def stylesheet(*files)
    content_for(:head_stylesheet) { stylesheet_link_tag(*files) }
  end

还有我的views/layouts/application.html.erb

<!DOCTYPE html>
<%
   if (controller.controller_name == "sessions") && (controller.action_name == "new")
     javascript 'theme/signup'
     stylesheet 'theme/signup'
   end
%>

<html>
<head>
  <title>Mysite</title>
  <!--[if lt IE 9]>
  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
  <![endif]-->
  <%= yield(:head_stylesheet) %>
  <%= stylesheet_link_tag    "application",  :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= yield(:head_javascript) %>
  <%= csrf_meta_tags %>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<%= yield %>
</body>
</html>

然后我生成了设计视图并调整了我的 twitter 引导表单 rails generate devise:views

现在想将我的 signup.css 放在注册视图中,但是如何?

所以我创建了设计控制器,以使用我的辅助方法:

bash <(curl -s https://raw.github.com/foohey/cdc/master/cdc.sh)

现在我被困住了,因为我的助手不和我一起工作:

<%
   if (controller.controller_name == "sessions") && (controller.action_name == "new")
     javascript 'theme/signup'
     stylesheet 'theme/signup'
   end
%>

rails 中是否有一种简单的方法来处理自定义 css 文件?我是资产管道概念的新手,这有点令人困惑。

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    您听说过 content_for 吗?它对这样的事情非常有用。在你的布局里面添加:

    <%= yield :head %>
    

    在你的 head 标签内。然后您可以在视图中编写以下内容(devise/sessions/new):

    <% content_for :head do %>
      javascript 'theme/signup'
      stylesheet 'theme/signup'
    <% end %>
    

    这将完美地将您的布局与单一视图问题分开,并且还应该解决您遇到的问题。

    【讨论】:

    • 是否可以在我的视图的 标签中声明这个?
    • @zer02,你可以在任何你想要的地方声明它。 'yield :some_symbol' 内部布局将“粘贴”任何已传递给 'content_for :some_symbol' 的内容。 Content_for 只是保存正在传递的块以供以后在布局中使用。
    【解决方案2】:

    您可以将自定义 css 文件放在公共目录内的 css 目录中以及您希望自定义 css 文件成为您执行此操作的视图的 &lt;head&gt; 标记内

    &lt;%= stylesheet_link_tag '/css/signup' %&gt;

    signup.css 仅可用于注册视图,前提是您放置 stylesheet_link_tag 的位置

    【讨论】:

    • 视图没有 部分。我需要在开发环境的配置中设置服务静态文件吗?在 /public/stylesheets 中找不到 css
    • css 只是一个示例,只需创建一个目录并将其命名为 css 或您想要的任何名称。如果您的devise/registrations/new.html.erb 上没有头部标签,只需在页面顶部写下您自己的&lt;head&gt;&lt;/head&gt; 并将stylesheet_link_tag 放在那里。
    【解决方案3】:

    我想你想要这样的东西:--

    <% if (controller.controller_name == "sessions") && (controller.action_name == "new")%>
       <%= stylesheet_link_tag "theme/signup"%>
        <%= javascript_include_tag "theme/signup" %>
    <% end %>
    

    【讨论】:

    • 我这样做了,但我不知道在注册时会触发什么控制器操作。路由文件不显示它是否是新会话。控制器存在,但函数为空且未注释。所以我实际上正在寻找一个不使用它的解决方案。
    • 更好的是,您可以直接将stylesheet_link_tagjavascript_include_tag 用于视图,方法是从设计文件而不是布局中覆盖它们
    • 注册过程由registrations_controller.rbnew 操作触发。因此控制器应该是registrations 而不是sessions
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    相关资源
    最近更新 更多