2016-06-14 5 views
0

現在、Rails 4を使用して多対多の関係で「実践」プロジェクトを進めています。実際には、レールをどうやってやるのか分からないことはほとんどありません。現在、医師と患者の2つのモデルがあります。私は予定モデルと一緒にそれらを結んだ。 (私は医師のみが含まれると私は現在、患者モデルで作業をしておりませんので、コードを任命します。)Railsで多対多の関係を扱う4​​

医師のモデルコード:

class Physician < ActiveRecord::Base 
    has_many :appointments 
    has_many :patients, :through => :appointments 
end 

予定モデルのコードをここに私はこれまで持っている私のコードです:

class Appointment < ActiveRecord::Base 
    belongs_to :physician 
    belongs_to :patient 
end 

医師コントローラー:

class PhysiciansController < ApplicationController 

def index 
    @physicians = Physician.all 
end 
end 

Appointme NTSコントローラ:

class AppointmentsController < ApplicationController 

def index 
    @appointments = Appointment.all 
    @physicians = Physician.all 
end 
end 

予定インデックスページコード-Iは、各予定の医師を表示する:

<h1>Showing Appointments</h1> 

    <% @appointments.each do |appointment| %> 

     <% appointment.physicians.each do |physician| %> 

      <h3><%= appointment.physicians.name %></h3> 

     <% end %> 

    <% end %> 

スキーマ:

create_table "appointments", force: :cascade do |t| 
     t.integer "physician_id" 
     t.integer "patient_id" 
     t.datetime "appointment_date" 
     t.datetime "created_at",  null: false 
     t.datetime "updated_at",  null: false 
    end 

    create_table "patients", force: :cascade do |t| 
     t.string "name" 
     t.datetime "created_at", null: false 
     t.datetime "updated_at", null: false 
    end 

    create_table "physicians", force: :cascade do |t| 
     t.string "name" 
     t.datetime "created_at", null: false 
     t.datetime "updated_at", null: false 
    end 

私のルートを必要に応じて

resources :patients 
    resources :physicians 
    resources :appointments 

はい、私は持っていません多くのコード私は足場を使用せず、自分ですべてを構築していません。 (これは私がベストを学ぶ気持ちです。)私が得ている具体的なエラーは次のとおりです:未定義のメソッドphysicians' for #<Appointment:0x007fa7d5bf7370> as well as undefined methodそれぞれのために#変更した場合、次の行のsを取り去ります。コントローラー内で:

<%任命医師が医師| %>(これは私が簡単に解決できるエラーメッセージを示しています)

ここでもまた、複数のデータベースを操作する方法を学習しています。私は医者のIDを問題なく現われることができます。しかし、私は医師のdbに移動し、医師のIDに基づいて名前を引き出したいと思います。 (うまくいけば意味があります。)どんな助けもありがとう!ご協力ありがとうございました!

答えて

0

PhysicianPatientbelong_toAppointmentの両方であるため、1対多の関連付けです。このため、あなたは単数形との関連を参照する必要があります。

appointment.physician # not physicians 
appointment.patient # not patients 

あなたのビューは次のようになります。

<h1>Showing Appointments</h1> 
<% @appointments.each do |appointment| %> 
    <h3><%= appointment.physician.name %></h3> 
<% end %> 

言ったことすべてを、あなたの団体がオフになっているようです。 belongs_toの関連付けは、関連するモデルが1つのモデルにしか属していないことを意味します。意味するところは、現在の設定では、PhysicianPatientは、ほぼ確実にそうではないAppointmentにしか属していないということを意味します。この場合、has_oneがより適切なようです:

class Appointment < ActiveRecord::Base 
    has_one :physician 
    has_one :patient 
end 

残りは同じです!

+0

この変更はどこで行う必要がありますか? –

+0

私の編集を参照してください。あなたの意見は修正する必要があります。また、私はあなたが予約 – Brennan

+0

で医師を取得できるので、おそらくあなたの予定コントローラに '@physicians = Physician.all'は必要ないでしょうが、これは正しいアプローチだとは思わないが。患者は本当に予定に属していますか? 「医師」と「患者」の両方が他の「予定」に関連付けることができないことを意味する。この理由から、私はあなたの 'belongs_to'団体は' has_one'であるべきだと思います – Brennan