Динамическое условие для ассоциации записей has_many: through. - PullRequest
1 голос
/ 08 июля 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы установить динамическое условие has_many : through.

В моем файле модели:

class Article < ActiveRecord::Base
  has_many :article_category_relationships,
    :class_name  => 'Article::Categories::ArticleRelationship',
    :foreign_key => 'article_id',
    :autosave    => true,
    :dependent   => :destroy
    # Here should be the dynamic condition statement (read below for more 
    # information about this)

  has_many :article_categories,
    :through     => :article_category_relationships,
    :source      => :article_category,
    :dependent   => :destroy
end

В связанной таблице базы данных Article::Categories::ArticleRelationship у меня также есть столбец created_by_user_id (другие столбцы article_id и category_id), который представляет id пользователя, создавшего отношение.

Итак, чтобы получить категории статей, относящиеся к пользователю, в приведенном выше коде ассоциации записей я хотел бы отфильтровать :article_category_relationships, передав динамическое условие, которое зависит от этого пользовательского значения id. В противном случае, если я не передам значение id, значение по умолчанию должно позволять получать все категории статей с использованием кода @article.article_categories.

Возможно ли это? Если да, то как я могу закодировать это в заявлении ассоциации записей?

1 Ответ

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

Я считаю, что область в вашей категории модель может быть тем, что вы ищете - что-то вроде этого:

scope :by_user, lambda {|user|
    unless user.nil?
        where('article_category_relationships.created_by_user_id IS ?', user.id).
        join(:article_category_relationships)
    end
}

Это позволяет вам звонить @article.article_categories.by_user(@user).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...