Продолжайте рассматривать ассоциацию записей `has_many: through` как класс ActiveRecord :: Relation после итерационной операции - PullRequest
0 голосов
/ 08 июля 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы сохранить класс ActiveRecord::Relation после этого (в приведенном ниже коде article_category_relationships представляет has_many :through Record Association):

# @article.article_category_relationships.class               # => ActiveRecord::Relation
@article.article_category_relationships.map(&:category).class # => Array

Это должно быть примерно так:

@article.article_category_relationships.map(&:category).class # => ActiveRecord::Relation

Похоже, что метод map приводит к потере класса ActiveRecord::Relation.

Можно ли сохранить класс ActiveRecord::Relation после запуска итеративного метода? Если да, то как это сделать?

Примечание : Мне бы хотелось, чтобы продолжать использовать все методы, предоставляемые Ruby on Rails для класса ActiveRecord::Relation (.where(...), .count, ...).

1 Ответ

0 голосов
/ 08 июля 2011

Если вы используете ruby ​​1.9, проверьте кран:

obj.tap{|x|...} => obj
Yields x to the block, and then returns x. The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.

    (1..10)                .tap {|x| puts "original: #{x.inspect}"}
      .to_a                .tap {|x| puts "array: #{x.inspect}"}
      .select {|x| x%2==0} .tap {|x| puts "evens: #{x.inspect}"}
      .map { |x| x*x }     .tap {|x| puts "squares: #{x.inspect}"}
...