Ruby on Rails 3 CSS仅适用于某些视图(设计)

时间:2013-09-09 12:52:26

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

我对Ruby on Rails很陌生,并希望将我的自定义CSS文件放入Devise(注册视图)。我将全局CSS放入application.js(Asset Pipeline)并在我的

中放置了2个Helper函数

助手/ 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>

然后我生成了Devise Views并调整了我的twitter bootstrap表单  rails generate devise:views

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

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

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文件吗?我是资产管道概念的新手,有点令人困惑。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

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

<%= yield :head %>

在你的头标记里面。然后你可以在视图中编写以下内容(devise / sessions / new):

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

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

答案 1 :(得分:1)

您可以将自定义css文件放在公共目录内的css目录中,以及希望自定义css文件执行此操作的视图的<head>标记内

<%= stylesheet_link_tag '/css/signup' %>

signup.css仅适用于注册视图,假设您放置stylesheet_link_tag的位置

答案 2 :(得分:0)

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

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