Как получить доступ к другим атрибутам таблицы с помощью ассоциаций

«Привет всем». Сейчас я немного тренируюсь с рельсами, и у меня возникают проблемы с пониманием того, как получить доступ к данным с помощью ассоциаций. В настоящее время у меня есть 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

Спасибо за ваше время!


person Alexandro Navarro    schedule 01.01.2017    source источник
comment
Можете ли вы разместить свои модели, а также?. Я предполагаю, что вы не упомянули ассоциации в них.   -  person Pramod    schedule 01.01.2017
comment
Только что сделал! Извините, забыл их добавить. Спасибо за ваше время!   -  person Alexandro Navarro    schedule 01.01.2017


Ответы (1)


Может быть, я что-то упускаю, но вы не забыли установить переменную @appointment?

 def show
   @appointment = Appointment.find(params['id'])
 end

(должно работать, если у вас есть маршрут для этого)

person Joel Blum    schedule 01.01.2017
comment
ЧТОААААААААА?! ПОЧЕМУ!?!?!? omg я был в этом весь день. Я не понимаю, что ее нельзя вызывать, если эта функция уже определена? Я определил это ниже приватного и подумал, что оттуда звонят. Большое спасибо за вашу помощь, я чувствую себя таким глупым прямо сейчас. - person Alexandro Navarro; 01.01.2017