«Привет всем». Сейчас я немного тренируюсь с рельсами, и у меня возникают проблемы с пониманием того, как получить доступ к данным с помощью ассоциаций. В настоящее время у меня есть 3 таблицы: «Врачи», «Пациенты» и «Назначения».
class CreateDoctors < ActiveRecord::Migration
def change
create_table :doctors do |t|
t.string :name
t.timestamps null: false
end
end
end
class CreatePatients < ActiveRecord::Migration
def change
create_table :patients do |t|
t.string :name
t.timestamps null: false
end
end
end
class CreateAppointments < ActiveRecord::Migration
def change
create_table :appointments do |t|
t.date :date_appointment
t.references :doctor, index: true, foreign_key: true
t.references :patient, index: true, foreign_key: true
t.timestamps null: false
end
end
end
При этом я пытаюсь создать форму для вставки записи в таблицу «Назначения», таким образом я могу получить доступ и получить имена врачей или пациентов после отправки формы.
<%= form_for(@appointment) do |f| %>
<%= f.label :date, "Choose a date for your appointment" %>
<%= f.collection_select(:doctor_id, Doctor.all, :id, :name, prompt: true) %>
<%= f.submit %>
<% end %>
Данные вставляются, но когда я вызываю Show «Шаблон», мне выдает ошибку, говорящую о том, что параметр для врача равен «Nil», хотя он имеет значение.
<%= @appointment.doctor.name %>
А вот данные контроллера встреч
class AppointmentsController < ApplicationController
def index
end
def show
end
def new
@appointment = Appointment.new
end
def create
@appointment = Appointment.new(appointment_params)
if @appointment.save
redirect_to @appointment
else
render "New"
end
end
private
def appointment_params
params.require(:appointment).permit(:date, :doctor_id, :patient_id)
end
def find_appointment
@appointment = Appointment.find(params[:id])
end
end
Что я хочу сделать, так это иметь возможность отображать или отображать имена врачей или пациентов в соответствии со значением атрибутов в строке, которая создается после создания новой строки с формой.
class Appointment < ActiveRecord::Base
belongs_to :doctor
belongs_to :patient
end
class Doctor < ActiveRecord::Base
has_many :appointments
has_many :patients, through: :appointments
end
class Patient < ActiveRecord::Base
has_many :appointments
has_many :doctors, through: :appointments
end
Спасибо за ваше время!