Выходишь со многими через ассоциацию - PullRequest
0 голосов
/ 06 июля 2010

У меня есть 2 модели Widget и Feature, у которых есть множество через ассоциацию с использованием модели WidgetFeature.

  class Widget < ActiveRecord::Base
    has_many :widget_features
    has_many :features, :through => :widget_features
  end

  class WidgetFeature < ActiveRecord::Base
    belongs_to :feature
    belongs_to :widget
    attr_accessible :children_features, :widget_id, :feature_id
  end

 class WidgetFeature < ActiveRecord::Base
   belongs_to :feature
   belongs_to :widget
   attr_accessible :children_features, :widget_id, :feature_id
 end

У меня есть widget_id.

Так что я делаю Widget.find_by_id (widget_id)

Теперь я хочу найти все функции для этого виджета, где widget_features.children_features IS NULL.

Я не знаю, как это сделать, помоги мне.

Ответы [ 3 ]

0 голосов
/ 06 июля 2010
Feature.all(:joins => :widget_features, :conditions => ["widget_id = ? and children_features is null", some_id])
0 голосов
/ 06 июля 2010

Я обошел named_scope и нашел элегантное решение.Итак, я публикую это здесь, так что другие, застрявшие с той же проблемой, также могут получить помощь.Мое решение дает вам возможность получить доступ к любому столбцу модели объединения в ассоциации "многие из них".

Вот решение моей проблемы, приведенное выше:

class Widget < ActiveRecord::Base
  has_many :widget_features
  has_many :features, :through => :widget_features

  def leaf_features
    widget_features.leaf_features.map{|widget_feature|widget_feature.feature}
  end
end

class WidgetFeature < ActiveRecord::Base
  named_scope :leaf_features, :conditions => 'children_features IS NULL'
  belongs_to :feature
  belongs_to :widget
  attr_accessible :children_features, :widget_id, :feature_id
end

Теперь Widget.find_by_id(widget_id).leaf_featuresдать вам только те функции, где children_features column is NULL.

0 голосов
/ 06 июля 2010

Попробуйте

@widget = Widget.find_by_id(widget_id)
@features = @widget.features.conditions("widget_features.children_features IS nil")

РЕДАКТИРОВАНИЕ

Ссылка это

has_many :features, :through => :widget_features, :conditions=>["widget_features.children_features is nil"]

И затем

@widget = Widget.find_by_id(widget_id)
@features = @widget.features
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...