Извлечение данных с использованием связи один-много - PullRequest
0 голосов
/ 12 декабря 2011

Я новичок в Рор.У меня есть 2 таблицы для группы (называемой 'ab') и подгруппы (называемой 'cd'). У каждой группы есть несколько подгрупп. Я определил отношения own_to и has_many.

Модель ab.rb

class Ab < ActiveRecord::Base
has_many:cds
end

Модель cd.rb

class Cd < ActiveRecord::Base
belongs_to :ab
end

ab и cd имеют 2 столбца, каждый из которых называется title и Dscr.Do мне нужно создать объединяющую таблицу (ab_cd_join_table)

Я хочу отобразить определенную группу и ее подгруппы в представлении.

Контроллер для представления

class DisplayController < ApplicationController

    def index
         @ab = Ab.find_by_title("XXXXXX")
             @cds = @ab.cds
                 for cd in @cds
                 logger.info cd.title
        end

Я использую это в представлении.

просмотр экрана

<%= @ab.title %>

Я не знаю, как отобразить заголовок и Dscr различных подгрупп, принадлежащих группе = "XXXXXX"

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Нужно ли создавать таблицу соединений (ab_cd_join_table)

Нет, в этом случае вам не нужна таблица соединений, вместо этого вам нужно добавить столбец ab_id в таблице cds (столбец внешнего ключа должен присутствовать в таблица определения модели принадлежит к ассоциации)

Отображение названия подгруппы в представлении

<% @ab.cds.each |sub_group| %>
<%= sub_group.title -%>
<%= sub_group.description -%>
<%end%>

Кроме того, если вам уже нужны подгруппы с группой, загрузите их в один запрос, используя опцию include в find, например

@ab = Ab.find_by_title("XXXXXX",:include=> :cds)

теперь вам не нужно явно вычислять cds, просто используйте код вида, упомянутый выше

0 голосов
/ 12 декабря 2011

Я думаю, что вы запрашиваете следующее:

<% @ab.cds.each do |cd| %>
<h1><%= cd.title %></h1>
<p><%= cd.description %></p>
<% end %>

и это в контроллере:

@ab = Ab.find_by_title("XXXXXX")

Таким образом, вы будете отображать все диски дляСоответствие ab-модели "XXXXXX".

Обновление: Для того, чтобы для принадлежащих_индикатора и has_many для работы модели с принадлежащим_свойством должен быть столбец для того, который имеет has_many.В этом случае Cd должен иметь столбец с именем ab_id.

rails g migration add_ab_id_to_cds ab_id:integer

cd.ab_id должен быть идентификатором соответствующей модели Ab.

cds = Cd.where(<something>)
cds.each do |cd|
  cd.ab_id = @ab.id
  cd.save
end

Возможно, это следует установить при создании объекта Cd, но просто для проверки вы можете сделать это следующим образом.

...