我正在尝试创建一个超级通用类,当从我继承该类时,可以调用通用Sidekiq工作者。
这个想法是让我所有的服务都能被正常或异步调用。问题是我想将对象传递给服务,但只能将指针传递给工作器。
因此,如果我的服务需要User
和String
,那么我目前将拥有:
*args = [#<User:y6t4ert56uu6>, "I'm a string"]
要使其正常工作,我需要制作以下数组:
[{activerecord: true, class: "User", value: user_id}, {activerecord: false, class: "String", value: "I'm a string"}]
一旦我知道User
是一个activerecord对象,我就可以安全地假设存在一个id
(假设我只是传递保存的对象)。否则,我只会输出变量的值。
一个完美解决方案的想法是:(没有重要代码)
user = User.first
str = "Hello"
is_activerecord(user) # returns true
is_activerecord(str) # returns false
任何人都可以提出有关此操作的建议吗?
谢谢
答案 0 :(得分:4)
Object.is_a?进行救援:
user = User.first
str = "Hello"
user.is_a?(ActiveRecord::Base) # true
str.is_a?(ActiveRecord::Base) # false