【发布时间】:2022-01-27 14:25:09
【问题描述】:
我目前有两个模型大多相似,但连接到不同的表
class MyModel1 < ActiveRecord::Base
...
def my_method
end
end
class MyModel2 < ActiveRecord::Base
...
def my_method
end
end
在许多地方,我有条件地获取数据,如下所示
class MyController < ApplicationController
...
def my_action
item = my_condition ? MyModel1.find_by(code: 123) : MyModel2.find_by(code: 123)
result = item.my_method
end
end
class OtherModel < ActiveRecord::Base
...
def other_method(item_id)
resp = my_condition ? MyModel1.find_by(code: item_id) : MyModel2.find_by(code: item_id)
...
end
end
但是在所有地方都很难维护这种类型的检查。我怎么能把这个概括一下?我知道如果我们从父模型继承,那么子类将可以访问所有父模型方法
class MyGeneralClass < MyModel1
def initialize
super
end
end
item = MyGeneralClass.find_by(code: 123)
但我不知道如何在 MyGeneralClass 中添加我的检查,以便在其他地方我可以调用所需的模型方法。如下所示
class MyGeneralClass
def initialize
klass = my_condition ? MyModel1 : MyModel2
klass.send(:private_instance_method)
end
end
item = MyGeneralClass.find_by(code: 123)
【问题讨论】:
标签: ruby-on-rails ruby activerecord rails-activerecord