【问题标题】:How to create a form for the rails-settings plugin如何为 rails-settings 插件创建表单
【发布时间】:2011-09-15 04:19:19
【问题描述】:

我有一个 Rails 3 应用程序,它需要一些用户定义的设置。我想使用这个https://github.com/ledermann/rails-settings 插件。我让它在 Rails 控制台中工作。但我无法以表格形式工作。我是否使用 fields_for 和 attr_accessible?如果是这样,我就没有运气了。

我需要为两个模型添加设置:

例如,特定于用户的设置,

user = User.find(123)
user.settings.color = :red
user.settings.color
# => :red

user.settings.all
# => { "color" => :red }

(以上在控制台中对我来说很好。)

但我需要通过标准的网络表单来管理它们。我很想知道其他人是如何处理这个问题的。

谢谢。

【问题讨论】:

    标签: ruby-on-rails forms activerecord settings


    【解决方案1】:

    我所做的就是将动态设置器/获取器添加到我的用户类中

    class User < ActiveRecord::Base
    
      has_settings
    
      def self.settings_attr_accessor(*args)
        args.each do |method_name|
          eval "
            def #{method_name}
              self.settings.send(:#{method_name})
            end
            def #{method_name}=(value)
              self.settings.send(:#{method_name}=, value)
            end
          "
        end
      end
    
      settings_attr_accessor :color, :currency, :time_zone
    
    end
    

    这样,您可以像使用用户模型的任何其他属性一样使用“颜色”。 添加更多设置也很简单,只需将它们添加到列表中即可

    【讨论】:

    • 优秀的答案——我有点不确定如何做到这一点,这就像一个魅力。使使用 rails-settings 非常干净——非常感谢! gem 的作者应该将此作为示例发布在他的 Github Wiki 上。我唯一的改变是将函数定义和函数调用设为私有。
    • 每次我在表单中使用它,就像普通变量一样,我得到:Can't mass-assign protected attributes: color, currency, time_zone。有什么想法吗?
    • 当我尝试这个时,我不断收到错误“参数数量错误(0 代表 1)”
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2012-06-17
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多