Rails: использование богатых таблиц соединений при сборе данных из связанных таблиц - PullRequest
0 голосов
/ 05 февраля 2019

Простите, если на этот вопрос уже был получен ответ.
Я искал некоторое время и подозреваю, что задаю неправильный вопрос, поэтому получаю "неправильные" ответы

Iу меня есть проект rails с 3 контроллерами с соответствующими представлениями и моделью
У меня есть для них ресурсные маршруты и я могу выполнять CRUD для каждого из них
- Карты
- Наборы
- JoinCardSets

Схема базы данных для них:

имя таблицы: карты

id
cardName
description
imageUrl

имя таблицы: наборы

id
setName
description
imageUrl

имя таблицы: join_card_sets

id
card_id
set_id
no_of_cards

карты и наборы имеют отношение многие ко многим, поэтому мои модели выглядят следующим образом:

class Card < ApplicationRecord

  has_many :join_card_sets
  has_many :sets, :through => :join_card_sets

end


class Set < ApplicationRecord

  has_many :join_card_sets
  has_many :cards, :through => :join_card_sets

end

class JoinCardSet < ApplicationRecord

  belongs_to :set
  belongs_to :card

end

Когда я перемещаюсьto CardsController # Show

Отображается:
Имя карты,
описание,
И с помощью некоторых рельсов можно использовать наборы, связанные с ним через таблицу соединений

Контроллер:

def show
    @mtg_card = Card.find(params[:id])
    @current_sets = @mtg_card.mtg_sets
end

«Показать» вид:

<h2><%= @card.name %></h2>
<%= @card.description %><br>
<img src="<%= @card.imageUrl %>" alt="<%= @card.name %>"><br>

<% if @current_sets.present?
  @current_sets.each do |t| %>
   <%= t.name %>: <%= %>
  <% end #end of for each loop current_set |t| %>
<% end #end of if statment %>

Что мне нужноСправка по следующим вопросам:
Когда @current_sets проходит через каждое соединение,
Я бы хотел, чтобы он поднял столбец "no_of_cards" и отобразил его вместе с именем набора карт.

Если это не ясно, или вы знаете, где лежит ответ, пожалуйста, дайте мне знать

1 Ответ

0 голосов
/ 05 февраля 2019

Хитрость в использовании ActiveRecord состоит в том, чтобы найти нужную точку в вашей сети ассоциаций, чтобы объекты, которые вы перебираете, либо сами имели достаточно информации для вашего представления, либо имели ассоциации, которые вы можете просмотреть, чтобы получить эту информацию.Set объекты в вашей схеме имеют много card_join_sets, поэтому нет способа получить одну соответствующую "no_of_cards".JoinCardSet объекты имеют только один набор, поэтому легко получить доступ к соответствующему набору, чтобы получить имя.

В контроллере:

    @current_join_sets = @mtg_card.join_card_sets

Тогда, на ваш взгляд:

 @current_join_sets.each do |t| %>
   <%= t.set.name %>: <%= t.no_of_cards %>
  <% end #end of for each loop current_set |t| %>

(В реальном коде здесь есть что убрать., t.set.name breaks Закон Деметры , и вы должны загружать данные, но это не по теме для этого вопроса.)

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