Ruby on Rails:将属性值分配给通用模型

时间:2014-07-25 19:31:07

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

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

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}”的未定义方法`stringify_keys':String

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

assign_attributes期望传递属性的哈希值。你传给它一个字符串。简单地说b = {attr_name.to_sym => 9}?