所以我很感興趣,如果有一種方法可以將字符串轉換爲活動記錄類。將字符串對象轉換爲活動記錄類
實施例:我已經從ActiveRecord::Base
繼承了User
類。 有沒有什麼辦法可以將字符串轉換到User
類,所以我可以用ActiveRecord
方法,如find
,where
等
所以我很感興趣,如果有一種方法可以將字符串轉換爲活動記錄類。將字符串對象轉換爲活動記錄類
實施例:我已經從ActiveRecord::Base
繼承了User
類。 有沒有什麼辦法可以將字符串轉換到User
類,所以我可以用ActiveRecord
方法,如find
,where
等
String#constantize
返回一個常具有指定名稱。對於這是你User
類:
"User".constantize
# => User(id: integer, ...)
您可以指定這一個變量,並調用ActiveRecord的方法:
model = "User".constantize
model.all
# => [#<User id:1>, #<User id:2>, ...]
你只是在你的代碼編寫
str="User"
class_name=str.constantize
,你會得到 像這樣的格式數據
User(id: integer, login: string, name: string, email: string, user_rank: integer
用戶的類名
第二種方法是 CLASS_NAME = Object.const_get(STR)
更安全的方式:
"string".classify.constantize.find(....)
在你的字符串類,而不是定義一個方法
def constantize_with_care(list_of_klasses=[])
list_of_klasses.each do |klass|
return self.constantize if self == klass.to_s
end
raise "Not allowed to constantize #{self}!"
end
然後使用
"user".constantize_with_care([User])
,現在你可以做這樣的事情
params[:name].constantize_with_care([User])
無任何安全隱患。
嚴格來說,它返回綁定到給定常量名的任何對象,不僅僅是模塊/類。 –
@MarekLipka沒錯,我已經更新了我的答案。 – Stefan
謝謝,那正是我正在尋找的。 –