2014-11-24 35 views
1

我有接受關鍵字參數的方法。如何傳遞ActiveRecord :: Base類的散列值

def foo(name:) 
    p name 
end 

而且我有一個ActiveRecord::BasePerson有一個name屬性。

現在我正在使用方法foo(name: person.name)

但我想打電話給foo(person.slice(:name))foo(person.attributes)這樣的方法,因爲還有一些其他的關鍵字參數。

我發現person.slice(:name)返回像{"name": "Someone"}。關鍵是字符串而不是符號,這會導致錯誤。

如何創建具有符號鍵的散列? 也許更好的方式來完成我想要的?

回答

1

這就是ActiveRecord如何存儲屬性。你想要的是:

person.slice(:name).symbolize_keys 

如果你這樣做,你經常會想修補的ActiveRecord:

def symbolized_slice(*args) 
    slice(*args).symbolize_keys 
end 

我沒有認識到,新的符號爲keyword arguments用Ruby 2.1。有趣。

相關問題