2015-11-17 2 views
1

Ниже код из http://guides.rubyonrails.org/association_basics.html#the-has_many-through-associationRails- has_many: через создание, удаление и доступ к записи

class CreateAppointments < ActiveRecord::Migration 
def change 
    create_table :physicians do |t| 
    t.string :name 
    t.timestamps null: false 
    end 

create_table :patients do |t| 
    t.string :name 
    t.timestamps null: false 
end 

create_table :appointments do |t| 
    t.belongs_to :physician, index: true 
    t.belongs_to :patient, index: true 
    t.datetime :appointment_date 
    t.timestamps null: false 
end 

конца конец

В приведенном выше примере как я:

1) Создать/уничтожить связь между врачом и пациентом. Я просто использую:

Create: Appointment.create(physician_id, patient_id) 
Destroy: (i have no clue hot to do this) 

Каков правильный способ?

2) Как мне получить доступ ко всему назначению date_date в модели Назначения для конкретного пациента или врача?

+0

Я в настоящее время создает отношения с помощью создания. Что касается разрушения, я уничтожаю запись на консоли. (Я очень новичок в рельсах, если это действительно так) – fox

+0

Я только что нашел следующее по другому вопросу, чтобы создать отношения: @ course.topics << Topic.new (params [: topic]) – fox

+0

Ваш фрагмент кода присваивает только код новую тему для временного varaible с именем '@ course'. Поэтому, хотя тема теперь является частью курса «@ course» и доступна через «@ course.topics», нет постоянных отношений. –

ответ

1

Вы можете назначить встречу с любого врача или пациента, в зависимости от ваших предпочтений:

@patient = Patient.find(params[:id]) 
@patient.appointments.create(physician: *object*, appointment_date: *datetime object*) # auto sets the patient to match the @patient.id 

#or from the physician 
@physician = Physician.last #select the last physician 
@physician.appointments.create(patient: *object*, appointment_date: *datetime object*) # auto sets the physician to match the @physician.id 

Если у вас есть оба идентификатора, вы также можете создать его таким образом:

Appointment.new(patient: *Patient object*, physician: *Physician object*, appointment_date: *datetime object*) 

Чтобы уничтожить запись, просто найдите активный объект записи и вызовите уничтожить его. Играйте в консоли, чтобы увидеть, как это работает. Например:

Patient.find(id).appointments.last.destroy #destroys the last appointment for a patient with id 

или найти и удалить встречу непосредственно:

# find active record and then call destroy 
@appointment = Appointment.find(1) # find appointment with ID: 1 
@appointment.destroy 

#call destroy directly by chaining commands 
Appointment.find(1).destroy #does the exact same thing as above. 
+0

Спасибо. Если я хочу уничтожить конкретное отношение, могу ли я использовать метод @Statyx: @ patient.appointments.pluck (: assign_date) или у вас есть другой способ сделать это? – fox

+0

pluck - это не метод уничтожения записи. Он выбирает конкретное поле. Посмотрите на мою последнюю строку кода. Просто убедитесь, что у вас есть ссылка на ActiveRecord, которую вы хотите удалить, и вызовите метод destroy на нем. Я уточню в своем ответе. –

+0

обновленный ответ. –

1

1/

Appointment.find_by(physician: @physician, patient: @patient).destroy 

2/

@patient.appointments.pluck(:appointment_date) 
+0

Большое вам спасибо! – fox

Смежные вопросы