是否可以确定变量是否为activerecord对象?

时间:2018-10-23 17:35:39

标签: ruby activerecord ruby-on-rails-5 rails-activerecord

我正在尝试创建一个超级通用类,当从我继承该类时,可以调用通用Sidekiq工作者。

这个想法是让我所有的服务都能被正常或异步调用。问题是我想将对象传递给服务,但只能将指针传递给工作器。

因此,如果我的服务需要UserString,那么我目前将拥有:

*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

任何人都可以提出有关此操作的建议吗?

谢谢

1 个答案:

答案 0 :(得分:4)

Object.is_a?进行救援:

user = User.first
str = "Hello"

user.is_a?(ActiveRecord::Base) # true
str.is_a?(ActiveRecord::Base)  # false