Как объединить таблицы MySQL в Ruby on Rails?

0

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

В настоящее время я только показываю список всех членов 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>
  • 0
    пожалуйста, обратитесь к guides.rubyonrails.org/active_record_querying.html#joins
  • 0
    name of the hall as a foreign key - хм. Это звучит плохо. Кроме того, fName не является обычным наименованием. Как вы определяете, является ли ResidenceStaff менеджером?
Показать ещё 1 комментарий
Теги:
model-view-controller
mariadb

1 ответ

1
Лучший ответ

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 в 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>
  • 0
    Я изменил таблицу общежитий, чтобы иметь int ID, и теперь все работает нормально, за исключением того, что Residence_staff не может идентифицировать поле fName. Какие-либо предложения?
  • 0
    Что вы имеете в виду, «не может идентифицировать поле fName»? Вы получаете ошибку? Если так, добавьте это к своему вопросу.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню