【问题标题】:User's Personal CSS Stylesheet in Ruby on RailsRuby on Rails 中的用户个人 CSS 样式表
【发布时间】:2012-10-14 02:53:45
【问题描述】:

我环顾四周,但找不到关于我需要做些什么来实现以下目标的线索:

这个问题假设我的所有模型控制器都正常工作,并且命名的 CSS 属性是在默认样式表中定义的。

我希望用户在登录时能够选择一些 CSS 属性来个性化他们自己的主题。基本属性是“body”和“page-wrapper”颜色。 (前景)

我希望他们能够在用户的编辑页面中选择这些属性(从表单中?)。 (已经创建)

关于如何使这项工作发挥作用或在正确的方向上取得良好进展有什么想法吗?

感谢您的帮助。

【问题讨论】:

    标签: css ruby-on-rails ruby-on-rails-3 forms styles


    【解决方案1】:

    我认为最好的方法是通过 javascript,在头部生成一个带有所需样式的样式标签。 Jquery 提供了一种简单的方法来做到这一点,您可以将样式存储在模型的列中。

    类似这样的:

    class User
      attr_accesible :styles
    

    view.erb

    <script>
      // Assume the @styles attr has something like "body { background-color: #567;}"
      $('head').append($('<style>').html('<%= @user.styles %>'))
    </script>
    

    @styles 将是您模型中的另一列,因此您应该通过迁移添加它

    rails g migration addstylestousers styles:string
    

    在你的 form.erb 中

    <%= f.label :styles %>
    <%= f.text_field :styles %>
    

    我认为只要你给他足够的提示,比如“在这个字段中添加body { background-color: red },让你的背景变红!”,用户将css样式放在这里就足够简单了。

    关于序列化,考虑this

    如果你想嵌套样式,那么脚本将是

    //Lets say that the user stored on @bgcolor and @fgcolor only css color codes, like '#222' or 'blue'
    var bgc = '<%= @user.style.bgcolor %>'
    var fgc = '<%= @user.style.fgcolor %>'
    var style = 'body { background-color: ' + bgc + '; foreground-color: ' + fgc + ' }'
    $('head').append($('<style>').html(style))
    

    请记住,在这种情况下,关系应该是User has_one :style。但是,嵌套它会让自己陷入更多问题,我认为这根本不值得。

    【讨论】:

    • 好的,非常感谢.. 但是当您说将样式存储在用户模型中时,我感到很困惑。另外,我假设用户会从表单中选择样式?如果是这样,“样式”属性将如何实现。感谢您的帮助。
    • 有很多方法可以做到这一点。如果@styles 只是一个字符串,你可以添加一个输入让用户编辑它,假设如果你给他们一些提示他/她将能够做到这一点。
    • 或者,您可以将@styles 设为序列化哈希,并使用更复杂的形式对其进行管理。
    • 我有点明白你在说什么,但我想我不明白你的一些术语是“序列化哈希”。我确实理解字符串,但“让用户结束它”我不理解。是否可以显示一个简单的表单示例或我将如何/在哪里定义“@styles?谢谢。
    • 非常感谢!但是还有一件事要打扰您。假设我建立了一个联合关系,模型看起来像这样:用户 has_many :styles |样式 belongs_to :user , attr_accessible :bgcolor, :fgcolor |因此,假设 bg color 的表单允许使用十六进制字符,并且用户在 #999999 中输入了 :bgcolor 字段。 javascript 在这种情况下看起来如何。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多