2013-06-04 33 views
7

所以我很感興趣,如果有一種方法可以將字符串轉換爲活動記錄類。將字符串對象轉換爲活動記錄類

實施例:我已經從ActiveRecord::Base繼承了User類。 有沒有什麼辦法可以將字符串轉換到User類,所以我可以用ActiveRecord方法,如findwhere

回答

10

String#constantize返回一個常具有指定名稱。對於這是你User類:

"User".constantize 
# => User(id: integer, ...) 

您可以指定這一個變量,並調用ActiveRecord的方法:

model = "User".constantize 
model.all 
# => [#<User id:1>, #<User id:2>, ...] 
+0

嚴格來說,它返回綁定到給定常量名的任何對象,不僅僅是模塊/類。 –

+0

@MarekLipka沒錯,我已經更新了我的答案。 – Stefan

+0

謝謝,那正是我正在尋找的。 –

3

你只是在你的代碼編寫

str="User" 
class_name=str.constantize 

,你會得到 像這樣的格式數據

User(id: integer, login: string, name: string, email: string, user_rank: integer 

用戶的類名

第二種方法是 CLASS_NAME = Object.const_get(STR)

1

更安全的方式:

"string".classify.constantize.find(....) 
1

在你的字符串類,而不是定義一個方法

 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]) 

無任何安全隱患。