我希望让我的用户能够从5种不同的布局中选择公共页面的显示方式。我假设根据布局我需要5个不同的css文件,然后需要将它传递给stylesheet_link_tag
我只知道如何使用if then语句。我不认为这是最好的方式。任何帮助......也可以吗?
由于
答案 0 :(得分:11)
您应该在会话变量中存储用户选择的布局(最简单,但在用户清除cookie或使用其他计算机时丢失),或者存储在数据库中。
假设样式表有五个名称,每个名称对应一种颜色:
blue_stylesheet.css
green_stylesheet.css
red_stylesheet.css
orange_stylesheet.css
white_stylesheet.css
将这些文件放在public/stylesheets.
将用户选择的样式表存储到session[:style]
变量中,如下所示:
session[:style] = 'green'
只要用户没有清除其Cookie,此值就会一直存在。
如果尚未存在,请在布局中创建application.erb文件。将为您网站上的每个模板呈现此文件中的代码。它应该包含<%= yield %>
之类的行。在此文件中放置以下内容:
<%=stylesheet_link_tag session[:style]+'_stylesheet'%>
就是这样!
祝你好运!答案 1 :(得分:4)
首先,尝试将'theme'字段添加到用户的模型中(使用迁移)。
然后在视图中添加一些链接(用户的设置):
link_to 'Change to green theme', :controller => "user", :action => "set_theme", :id => "green"
控制器:
def set_theme
# don't forget to check, is there a theme with such params
current_user.update_attributes :theme => params[:id]
end
公开个人资料的控制人:
def public_profile
@theme = 'default'
user = User.find(params[:user_id]) # profile's owner
@theme ||= user.theme # overriding default theme to custom one
end
布局:
<%=stylesheet_link_tag @theme %>