Rails:有关如何允许用户个性化其样式表的教程

时间:2011-04-14 15:27:55

标签: ruby-on-rails css ruby-on-rails-3 ruby-on-rails-plugins

我是Rails的新手(以及一般的Web开发)。我一直在寻找可以帮助我完成项目的Rails教程。我找到了几乎所有问题的解决方案,但仍有一个问题。

正如标题所示,我想让我的网站用户为他们的个人空间个性化他们的css样式表。 Twitter喜欢。

任何人都可以帮助我吗?那太可靠了。

谢谢!

编辑:

好的,所以这是我的代码到目前为止(我正在使用Devise)

#stylesheets_controller.rb
class StylesheetsController < ApplicationController

  def user_css
  if user_signed_in?
    @user = current_user
  end

  respond_to do |format|
    format.css
  end
end

end

我的“动态”CSS:

#user_css.css.erb
<%=
  if @user # User log in ?
    background_color = @user.color_index
  else
    background_color = "666"
  end
%>

.cadre {
   background-color : #<%= background_color %>;
   height: 50 px;
   width: 50 px;
}

你能告诉我我做错了什么,因为我遇到了这个错误并且无法加载我的CSS:

  

在2011-04-18 15:09:07 +0200

开始获取127.0.0.1的“/stylesheets/user_css.css”      

由StylesheetsController#user_css处理为HTML

     

←[1m←[36mUser Load(2.0ms)←[0m←[1mSELECT“users”。* FROM“users”WHERE(“users”。“id”= 5)LIMIT 1←[0m

     

已完成406在127毫秒内无法接受

如果您需要我的任何文件中的代码,请告诉我。

1 个答案:

答案 0 :(得分:3)

也许您可以尝试创建样式表控制器:

class StylesheetsController < ...
  def per_user # or whatever name you like
    @user = User.find(params[:id])

    respond_to do |format|
      format.css # I didn't try it, but I guess this should work, please tell me if not
    end
  end
end

这是你的模板:/app/views/stylesheets/per_user.css.erb

/* put whatever you want here */
#user-<%= @user.id %> {
  color: #666;
}

<%= @user.user_defined_css %>

最后路线:

get '/stylesheets/per_user.css' => 'stylesheets#per_user', :as => :per_user_stylesheet

<%= stylesheet_link_tag per_user_styleseet_path %>

我猜样式表不会变得太频繁。所以你最好缓存结果。

===更新===

我已经尝试了上面的代码,它也没有工作.......

所以这是我能想到的另一种方式,通过使用partial。

在你的布局文件中:

# views/layouts/application.html.erb
......
<head>
  <%= render :partial => "stylesheets/user_css", :locals => {:user => @user} %>
</head>
......

您的部分包含用户的自定义css。

这可能不是很漂亮,但我认为这应该有效。