Улучшение ассоциации ': has_many: through' для извлечения данных - PullRequest
0 голосов
/ 09 сентября 2011

Я использую Ruby on Rails 3.0.10, и я хотел бы улучшить некоторый код (продолжайте читать для получения дополнительной информации), который извлекает данные из базы данных, используя :has_many :through связь.

В модели Ihave:

class Article < ActiveRecord::Base
  has_many :category_relationships

  has_many :categories,
    :through => :category_relationships,
end

Я хотел бы улучшить следующий код (который извлекает объекты категорий статей, «фильтруя» некоторые из них с помощью оператора where), чтобы следовать «Ruby on Rails Способ выполнения».вещи ":

@articles.category_relationships.where(:comment_id => @comment.id).map{ |category_relationship| category_relationship.article_category }

Как я могу это сделать? 1012 * Могу ли я" работать "над ассоциацией @articles.categories, чтобы улучшить приведенный выше код?Если да, то как?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2011

Можете ли вы использовать что-то вроде ниже?

@articles.categories.where(["category_relationships.comment_id = ?",
                            @comment.id])

Если вы беспокоитесь о СУХОЙ, возможно, вы могли бы извлечь куда в модель.

class Article < ActiveRecord::Base
   has_many :category_relationships

   has_many :categories,
      :through => :category_relationships do
     def has_comment(comment_id)
       where(["category_relationships.comment_id = ?", comment_id])
     end
   end

end

@articles.categories.has_comment(@comment.id)
0 голосов
/ 09 сентября 2011

Я думаю, вам нужны вложенные has_many :through отношения между Article и CategoryRelationship.Вот плагин, который я когда-то успешно использовал для достижения именно того, что вы ищете.

https://github.com/ianwhite/nested_has_many_through

В этом блоге также обсуждаются другие подходы.

...