我正在使用Ruby on Rails 3.0.7并且我想初始化一个新的ActiveRecord::Relation
,这样我就可以使用类对象(相同“类型”的所有对象)自己填充它。 <<
方法;否则(为了我的需要)我必须是一个新的Ruby array
类,但是使用该数组我不能运行方法(例如where
,order
等...) ActiveRecord::Relation
。
def initialize(klass, table)
@klass, @table = klass, table
@implicit_readonly = nil
@loaded = false
SINGLE_VALUE_METHODS.each {|v| instance_variable_set(:"@#{v}_value", nil)}
(ASSOCIATION_METHODS + MULTI_VALUE_METHODS).each {|v| instance_variable_set(:"@#{v}_values", [])}
@extensions = []
end
但我没有找到关于此的良好文档。
如何初始化ActiveRecord::Relation
?直接使用“自定义”ActiveRecord::Relation
对象是一种常见做法吗?你有什么建议?
PS:也许我必须使用AssociationCollection,因为在我添加(使用<<
)类对象的所有操作结束时,我需要使用其相关的replace
方法。
答案 0 :(得分:0)
我不确定我理解你的要求。对于应用程序要求,覆盖初始化是闻所未闻的。 API非常强大,通常不需要覆盖AREL方法。
您可以使用类似MyModel.scoped
的内容来获取基本关系吗?你在寻找2个系列(一个来自DB,一个是预先准备好的)?
基于评论: MyModel.scoped会给出一个基本关系 - 你可以这样做:
pre_prepared_items = [item1, item2, item3]
my_items = MyModel.where("x = z").order("a ASC")
@mixed_items = pre_prepared_items + my_items
或者您可以准备2个不同的集合,并且可以在视图中进行相应的显示。
@pre_prepared_items = [item1, item2, item3]
@my_items = MyModel.where("x = z").order("a ASC)