2013-06-26 8 views
2

Неужели кому-то повезло, что has_one прошел через has_many отношения в той же модели. Я получаюRails has_one через has_many не работает

ActiveRecord :: HasOneThroughCantAssociateThroughCollection: Не может быть HAS_ONE: через ассоциацию

Похоже, что это было бы легко взять набор результатов has_many и отфильтровать его вниз по определенному ключу и назвать его отношения has_one ,

Использование рельсов 3.2.12

Вот мои ассоциации прямо сейчас участие другая модель.

has_one :original_participation, :through => :participation 

has_one :original_participant, :through => :original_participants, :foreign_key => "organization_id" 

has_many :original_participants, 
    :through => :original_participation, 
    :source => :participants 

Мне нужно пройти эту последнюю ассоциацию и отфильтровать ее организацией organization_id.

ActiveRecord :: HasOneThroughCantAssociateThroughCollection: не может иметь has_one: через ассоциацию 'Surveys :: Member # original_participant', где: через ассоциацию 'Surveys :: Member # original_participants' представляет собой коллекцию. Вместо этого укажите ассоциацию has_one или belongs_to в опции: through.

+0

Не могли бы вы разместить свои модели? – gotqn

+0

Вы говорите, что у вас есть один ': original_participant' из коллекции': original_participants'. Невозможно узнать, кто изначальный_частник. Если вы хотите только один, то в вашем методе вы можете просто использовать 'original_participants.first' – lilwupster

+0

Ну, original_participants - это коллекция, и через эту коллекцию я хочу найти ту, которая имеет текущие объекты oganization_id. Это может быть даже не возможно, как правило, мы просто входим в рамки, но мы делаем это с мышлением сфинкса, а используемая нами версия не поддерживает присоединение к областям. Мы собираемся взять это с другого пути, но чтобы избежать этого беспорядочного поиска. – wallerjake

ответ

2

С has_one вам не нужно: через Не нужно посреднические отношения.

Если я думаю, что я знаю, что вы пытаетесь сделать, у вас есть иерархия тестов:

has_one test_parent, :class_name => "Test", foreign_key: "child_test"

has_many tests

называть их:

@my_array_of_children = tests

@my_parents_id = test.id

и т. Д.

+0

Как бы вы назовете, что у вас много ассоциаций, но без использования? has_one test,: class_name => тесты и has_many тесты - это другие отношения? – wallerjake

+0

Добавил это, чтобы ответить, чтобы сделать его более читаемым .. Если я думаю, что знаю, что вы пытаетесь сделать, у вас есть иерархия тестов: 'has_one test_parent,: class_name =>" Test ", foreign_key:" child_test "' 'has_many tests' называть их: ' @my_array_of_children = tests' '@my_parents_id = test.id' и т.д. – lilwupster

+0

Я обновил свой вопрос выше с более подробной информацией. Я продолжаю получать ActiveRecord :: HasOneThroughCantAssociateThroughCollection: не может иметь has_one: через ассоциацию 'Surveys :: Member # original_participant', где: через ассоциацию 'Surveys :: Member # original_participants' - это коллекция. Вместо этого укажите ассоциацию has_one или belongs_to в опции: through. – wallerjake