【问题标题】:Ruby on Rails: Assigning attribute values to generic modelRuby on Rails:将属性值分配给通用模型
【发布时间】:2014-09-17 17:59:39
【问题描述】:

我正在尝试编写一个 ruby​​ on rails 函数,该函数将为任何模型创建一个新对象。这是我到目前为止所拥有的

def create_populated_object(model)
        test_object = model.new
        model.columns.each do |column|
            attr_name = column.name
            attr_type = column.type

            #test_object.assign_attributes(attr_name+':'+ "9")
            puts "#{':'+attr_name} => #{attr_type}"

            if attr_type.to_s == 'integer'
                b = '{:' + attr_name.to_s + '=>' + 9.to_s + '}'
                puts b
                test_object.assign_attributes(b)
                puts "it worked"
            elsif attr_type.to_s == 'string'
                puts "string"
            elsif attr_type.to_s == 'datetime'
                puts "date time"
            elsif attr_type.to_s == 'boolean'
                puts "boolean"
            elsif attr_type.to_s == 'text'
                puts "text"
            else
                puts "UNKNOWN ATTRIBUTE TYPE"
            end

        end

        puts test_object
    end

在我的示例中,id 是模型的第一个属性。我尝试将值 9 分配给它,但我不断收到此错误:

NoMethodError: "{:id=>9}":String 的未定义方法 `stringify_keys'

有人知道如何解决这个问题吗?

【问题讨论】:

  • 始终给出问题的最小示例中涉及的所有内容。在这里,分配的代码和数据库状态以及解释“我尝试将值 9 分配给它”的任何其他内容。阅读帮助重新提出好问题。 (即使事实证明这个特定问题的解决方案已经足够了。)

标签: ruby-on-rails ruby generics model attributes


【解决方案1】:

您需要向方法发送一个Hash 对象而不是字符串:

b = { attr_name => 9 }
test_object.assign_attributes(b)

【讨论】:

    【解决方案2】:

    assign_attributes 期望将属性散列传递给它。您正在向它传递一个字符串。简单地说 b = {attr_name.to_sym => 9} 会不会有问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多