在一個循環內,我試圖將該值設置爲對象的鍵值。不知道如何做到這一點:使用一個值在Ruby中設置一個對象的鍵值
@user = {"username"=>"123", "full_name"=>"John Doe"}
@account = Account.new
@user.keys.each { |key|
@account.key = @user[key]
}
返回的錯誤:NoMethodError:未定義的方法`鍵=」
在一個循環內,我試圖將該值設置爲對象的鍵值。不知道如何做到這一點:使用一個值在Ruby中設置一個對象的鍵值
@user = {"username"=>"123", "full_name"=>"John Doe"}
@account = Account.new
@user.keys.each { |key|
@account.key = @user[key]
}
返回的錯誤:NoMethodError:未定義的方法`鍵=」
Ruby中的函數調用就像消息傳遞一樣。所以你要找的是send。
您示例中的@account
對象不是像@user
這樣的哈希,它是一個Class實例。
但Rails有更好的方法來初始化屬性的型號:
@account = Account.new(username: '123', full_name: 'John Doe')
在Rails控制器,這些通常是在params
哈希值,如果你正確地寫下您的形式:
@account = Account.new(params[:user])
如果你必須做手工,您可以:
@account = Account.new
# set all attributes at once
@account.attributes = @user
# this also works, but it's the least desirable
@user.each {|key, value| @account.send("#{key}=", value) }
最後EXA因爲@account.key = value
實際上是一個方法調用的語法糖:@account.key=(value)
我強烈建議通過Rails Form Helpers閱讀和建立你的表格如何建議。
它看起來像你想要的是讓@ account.username是123,和@ account.full_name是「John Doe」,對嗎?
帳戶是否有username
和fullname
屬性?它有key
屬性嗎?它顯然沒有key
,因爲這就是你得到這個錯誤的原因。
如果賬戶確實有username
和fullname
,然後就去做:
@account.update_attributes!(@user)
如果沒有的話,我不知道你想做什麼。
這樣做;
@user = {"username" => "123", "full_name" => "John Doe"}
@account = Account.new
@user.keys.each{|key| eval("@account.#{key} = @user[key]")}
謝謝亞當,更新後的例子爲我工作。真棒。 – oprogfrogo 2012-02-27 21:31:24