Rails 3 =>: has_many Xs, via => Y, Z - PullRequest
       2

Rails 3 =>: has_many Xs, via => Y, Z

0 голосов
/ 19 апреля 2011

Я пытаюсь сделать что-то вроде

class Event < ActiveRecord::Base

  has_many    :links, :dependent => :destroy
  belongs_to  :activity
  belongs_to  :facility
  has_many    :infos, :through => :activity
  has_many    :infos, :through => :facility

  accepts_nested_attributes_for :infos

end

Но это приводит к has_many :infos, :through => :facility, в то время как has_many :infos, :through => :activity игнорируется.

Как я могу выразить это в правильном синтаксисе?

РЕДАКТИРОВАТЬ:

Если я реализую метод Влада и затем использую

@ events = Event.all (: include => [: facility_infos,: activity_infos],: условие => ["infos.language_id =?", 2],: order =>: время)

я получаю :activity_infos для language_id == 2, но, к сожалению, я получаю:facility_infos для всех языков!Как решить эту проблему?

РЕДАКТИРОВАТЬ 2:

Вот вывод, который вы запросили:

ВЫБРАТЬ "события". "Id" AS t0_r0, "события "." время "AS t0_r1," события "." каждый день "AS t0_r2," события "." activity_id "AS t0_r3," события "." созданный_at "AS t0_r4," события "." updated_at "AS t0_r5,"events "." facility_id "AS t0_r6," events "." home "AS t0_r7," информация "." id "AS t1_r0," информация "." title "AS t1_r1," информация "." описание "AS t1_r2,"информация "." местоположение "AS t1_r3," информация "." language_id "AS t1_r4," информация "." made_at "AS t1_r5," информация "." updated_at "AS t1_r6," информация "." Activity_id "AS t1_r7,"информация "." Facility_id "AS t1_r8," информация "." service_id "AS t1_r9," activity_infos_events "." id "AS t2_r0," activity_infos_events "." title "AS t2_r1," activity_infos_events "." описание "AS" t__activity_infos_events "." location "AS t2_r3," activity_infos_events "." language_id "AS t2_r4," activity_infos_events "." созданный_at "AS t2_r5," activity_infos_events "." updated_at "AS t2_r6, Activity_in_in_in_ Activity_e_in_in_ Activity_e_in_in_ Activity"id "AS t2_r7," activity_infos_events "." facility_id "AS t2_r8," activity_infos_events "." service_id "AS t2_r9 FROM" события "LEFT OUTER JOIN" объекты "ON" события "." facility_id "=" средства "." id "СЛЕДУЮЩЕЕ НАРУЖНОЕ СОЕДИНЕНИЕ "infos" ON "infos". "Ознание "=" средства "." Id "СЛЕДУЮЩЕЕ ОБЪЕДИНЕНИЕ" деятельностей "ВКЛ" события "." Activity_id "=" деятельностей "." Id "СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ ВНУТРИ" infos ""activity_infos_events" ON "activity_infos_events". "activity_id" = "Activities". "id" ГДЕ (infos.language_id = 2) ЗАКАЗАТЬ ПО времени

1 Ответ

1 голос
/ 19 апреля 2011

хорошо, вы можете сделать следующее:

has_many :activity_infos, :through => :activity, :source => :infos, :class_name => "Info"
has_many :facility_infos, :thorough => :facility, :source => :infos, :class_name => "Info"


def infos
  activity_infos + facility_infos
end

ОБНОВЛЕНИЕ:

пожалуйста, покажите вывод ниже:

Event.includes([:facility_infos, :activity_infos]).where(['infos.language_id = ?', 2]).to_sql

ОБНОВЛЕНИЕ 2:

выглядит так:

Event.includes([:facility_infos, :activity_infos]).where(['infos.language_id = ? AND activity_infos_events.language_id = ?', 2, 2])

должен вернуть то, что вы ожидаете?

...