Как объединить таблицы MySQL в Ruby on Rails? - PullRequest
0 голосов
/ 26 апреля 2018

Я очень плохо знаком с рельсами и вообще работаю с базами данных.Я пытаюсь просто отобразить список всех членов Residence_staff, которые являются «менеджерами», и hallName объекта hallOfResidence, в котором они работают. Residence_staff - это 1 таблица с полем «fName» и названием зала в качестве внешнего ключа длятаблица зала заседаний.Как я могу объединить две таблицы и отобразить их на экране?

В настоящее время я только отображаю список всех членов Residence_staff.

Модель персонала:

class ResidenceStaff < ApplicationRecord
  validates :fName, presence: true

end

Модель залов:

class HallOfResidence < ApplicationRecord
end

Контроллер:

class HomeController < ApplicationController

  def index
    @residence_staff = ResidenceStaff.all
  end
end

Просмотр

<h1>Title</h1>

<div>
  <% @residence_staff.each do |residence_staff| %>
    <%= residence_staff.fName%>
  <% end %>
</div>

1 Ответ

0 голосов
/ 26 апреля 2018

Caveat Emptor: код не проверен.

Учитывая что-то вроде (вы действительно должны использовать hall_of_residence_id в качестве внешнего ключа):

# == Schema Information
#
# Table name: residence_staffs
#
#  id                                :integer          not null, primary key
#  first_name                        :string
#  hall_of_residence_id              :integer
#  position                          :string
#  created_at                        :datetime         not null
#  updated_at                        :datetime         not null
#
class ResidenceStaff < ApplicationRecord
  validates :first_name, presence: true
  belongs_to :hall_of_residence

  class << self

    def managers
      where(position: 'manager')
    end

  end
end

И:

# == Schema Information
#
# Table name: hall_of_residences
#
#  id                                :integer          not null, primary key
#  name                              :string
#  created_at                        :datetime         not null
#  updated_at                        :datetime         not null
#
class HallOfResidence < ApplicationRecord
  has_many :residence_staffs
end

Похоже, вы должны быть в состоянии сделать что-то вроде (см. Руководство для получения информации о includes):

class HomeController < ApplicationController

  def index
    @residence_staffs = ResidenceStaff.all
    @residence_staff_managers = ResidenceStaff.managers.includes(:hall_of_residence)
  end

end

И:

<h1>Title</h1>

<div>
  <% @residence_staff_managers.each do |residence_staff| %>
    <%= residence_staff.first_name>
    <%= residence_staff.hall_of_residence.name >
  <% end %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...