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

Dav*_*ley 0 ruby activerecord rails-activerecord ruby-on-rails-5

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

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

因此,如果我的服务需要一个User和一个,String我目前将拥有:

*args = [#<User:y6t4ert56uu6>, "I'm a string"]
Run Code Online (Sandbox Code Playgroud)

为此,我需要制作这个数组:

[{activerecord: true, class: "User", value: user_id}, {activerecord: false, class: "String", value: "I'm a string"}]
Run Code Online (Sandbox Code Playgroud)

一旦我知道User是一个 activerecord 对象,我就可以安全地假设有一个id(假设我只是传递保存的对象)。否则我只会输出变量的值。

完美解决方案的一个想法是:(没有重要的代码)

user = User.first
str = "Hello"

is_activerecord(user) # returns true
is_activerecord(str) # returns false
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出有关如何做到这一点的想法吗?

谢谢

Ily*_*hov 5

对象.is_a?救援:

user = User.first
str = "Hello"

user.is_a?(ActiveRecord::Base) # true
str.is_a?(ActiveRecord::Base)  # false
Run Code Online (Sandbox Code Playgroud)

  • @JörgWMittag 您是否已经打开了一张票,以便在“Object”类中将“is_a?”方法重命名为“is_a_reference_to_an_object_of?”? (2认同)