2014-07-25 53 views
0

我想在rails函數中編寫一個ruby函數,它將爲任何模型創建一個新對象。這是我到目前爲止的內容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:未定義的方法`stringify_keys'爲‘{:ID => 9}’:字符串

任何人都知道如何解決這一問題?

+0

總是讓一切都涉及到這個問題的一個小例子。在這裏,分配的代碼和數據庫狀態以及其他任何解釋「我嘗試給它賦值9」。閱讀幫助重新問好問題。 (即使事實證明,在這個特定的問題中有足夠的解決方案。) – philipxy

回答

1

assign_attributes預計屬性的哈希值傳遞給它。你正在傳遞一個字符串。簡單地說b = {attr_name.to_sym => 9}會有問題嗎?

+0

謝謝你的工作! –

2

您需要發送一個Hash對象,而不是字符串的方法:

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