У меня есть три модели: колоды, слоты и карты. Я собрал их так ... Палубы сделаны из множества слотов, каждый слот содержит одну карту, и любая карта может отображаться в нескольких разных слотах. Я смоделировал его после структуры «Order - Order Line Item - Product», надеюсь, что это имеет смысл.Ассоциация активных записей после запроса «.where»
В любом случае, колоды имеют целое поле, называемое: deck_type, и предположим, что я хочу получить все колоды определенного типа, а затем увидеть все их карты. Я ожидаю, чтобы быть в состоянии выполнить этот запрос, но я получаю ошибку неопределенного метода «карты»:
Deck.where(:deck_type => 1).cards
Чтобы получить все палубы 1-го типа, а затем выплюнуть свои карты. У меня установлена ассоциация «колода имеет много карт через слоты», и когда я называю «карты» на одной колоде, она отлично работает, чтобы вернуть карты.
Я чувствую, что это должен быть довольно простой запрос - чего мне не хватает?
Заранее благодарим за понимание.
Благодарим вас за скорый ответ и прекрасную информацию - представленный вами вариант карты и сглаживания возвращает карты, которые я ищу совершенно! У меня нет поля: deck_id в таблице карт, так как они связаны с колодами через таблицу слотов - это имеет смысл или моя модель не собирается работать? На палубах много карточек и карточек могут быть на многих колодах, поэтому я хотел избегать отношений «многие ко многим», если это возможно, помещая таблицу слотов между ними. –
считают, что у вас есть связь между колодами и картами, так что последняя команда, которую я написал, может работать. Это быстрее, чем карта (&: cards) .flatten.uniq – Humza
Палубная модель - «has_many: cards,: through =>: slots» ... это позволяет мне получать карты через колоды, но это скорее вызов вернуться палубы через карты, так как я не могу поместить на карту карт «own_to: decks,: through =>: slots» (по крайней мере, не то, что я знаю). Тем не менее, я все еще довольно новичок в этом, так что изучение того, как работает .map, является фантастическим и позволяет мне использовать одну линию для выполнения действий, которые обычно занимают несколько! –