所以我很感兴趣,如果有一种方法可以将字符串转换为活动记录类。将字符串对象转换为活动记录类
实施例:我已经从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
谢谢,那正是我正在寻找的。 –