使用ActiveRecord :: Relation对象

时间:2011-06-24 14:59:15

标签: ruby-on-rails ruby ruby-on-rails-3 class initialization

我正在使用Ruby on Rails 3.0.7并且我想初始化一个新的ActiveRecord::Relation,这样我就可以使用类对象(相同“类型”的所有对象)自己填充它。 <<方法;否则(为了我的需要)我必须是一个新的Ruby array类,但是使用该数组我不能运行方法(例如whereorder等...) ActiveRecord::Relation

Seeing the RoR code我在:

中找到了这个
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方法。

1 个答案:

答案 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)