2016-04-03 7 views
0

これらは私の3つのモデルです:ユーザーのためのRubyのRailsの上にhas_many:協会のコントローラを介して

モデル:患者のための

class User < ActiveRecord::Base 
has_many :patients, through: :treatments 
has_many :treatments 
. 
. 
. 

モデル:

:治療のため

class Patient < ActiveRecord::Base 
has_many :user, through: :treatments 
has_many :treatments, dependent: :destroy 
. 
. 
. 

モデル

class Treatment < ActiveRecord::Base 
belongs_to :patient 
belongs_to :user 
validates :patient_id, presence: true 
default_scope -> { order(created_at: :desc) } 
end 

これは私です治療台:

class CreateTreatments < ActiveRecord::Migration 
    def change 
    create_table :treatments do |t| 
     t.date :teartment_date 
     t.text :remark 
     t.float :fee 
     t.references :patient, index: true, foreign_key: true 

     t.timestamps null: false 
    end 
    add_index :treatments, [:patient_id, :created_at] 
end 
end 

私はコントローラを定義して、特定のユーザの患者に属する新しい治療法を作成したいと考えています。

これは私のコントローラである:

def new 
    @treat = Treatment.new 
    end 

    def create  

    @userpatient = current_user.treatments.build(treat_params) 

    if @userpatient.save 
    flash[:success] = "new treatment added" 
    redirect_to root_url 
    else 
    render 'new' 
    end 
end 

が、私は新しい治療法を作成したい一方で、これは、私が受信エラーです:

ActiveRecord::UnknownAttributeError in TreatmentsController#create 

unknown attribute 'user_id' for Treatment. 

をして、これはCURRENT_USERです:

def current_user 
    if (user_id = session[:user_id]) 
    @current_user ||= User.find_by(id: user_id) 
    elsif (user_id = cookies.signed[:user_id]) 
    user = User.find_by(id: user_id) 
    if user && user.authenticated?(cookies[:remember_token]) 
    log_in user 
    @current_user = user 
    end 
    end 
    end 

私はレールを使い慣れていません。基本的な考え方は、ユーザーが特定のpatiに属する治療を受けたいと思っていることですent。

返信いただきありがとうございます。この問題は、参照列を追加することで解決できます。今、私は受け入れませんが、それはいかなる治療も救いません。私はその部分を意味します:

それは保存せず、ただ新しいものを表示します。

1-どのように私は私のコントローラを作成コーディングすることができます

私は2つの質問がありますか?

2私の治療法を患者の「治療」方法で定義して、患者の治療法を検索する方法あなたはUserhas_many :treatmentsとそのTreatmentbelongs_to :userことを言うとき

+1

'treat'テーブルに' user_id'があるはずです。 – Pavan

+0

それを追加するには? – Shahryar

+1

@Pavanが前にコメントに書いたように、マイグレーションを使ってuser_idを追加すると、 'add_reference:treatments、:user、index:true'のような参照をそこに使うことができます。 – unused

答えて

1

、両方の団体は、あなたのtreatments表にuser_id列を見つけることが期待されています。 (!彼らはまだデータがない場合):あなたが含まれるように、あなたの移行を変更したい場合があります

t.integer :user_id 

してからテーブルを削除すると、移行を再実行します。あるいは、新しい移行を作成して実行するだけで、次のように実行できます。

add_column :treatments, :user_id, :integer 
+0

インデックスを追加することもできますが、 'add_reference'を使うこともお勧めします。 – unused

+0

私はユーザーが患者だと思う - だから多分has_many:patients、foreign_key: "user_id"。 – Ronna

+0

ユーザーは患者ではありません – Shahryar

関連する問題