2016-04-03 65 views
0

這些都是我的3種型號:Ruby on 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 

我是新來的鐵軌,基本的想法是我希望我的用戶有治療屬於一個特定的帕蒂ENT。

感謝我通過添加參考列來回答這個問題。現在我收不到,但它不保存任何治療。我的意思是零件:

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

它不保存,只是渲染'新'。

我有2個問題:

1 - 我如何代碼我創建控制器?

2-如何根據患者檢索我的治療方案。我應該在患者「放映」方法中定義哪些變量以便檢索其治療方案?

+1

你應該在'處理器'表中有'user_id'。 – Pavan

+0

如何添加? – Shahryar

+1

使用遷移將user_id添加爲@Pavan之前在評論中寫的,您可以使用像add_reference:treatments,:user,index:true這樣的引用。 – unused

回答

1

當你說Userhas_many :treatmentsTreatmentbelongs_to :user,兩個協會正期待找到你treatments表中的列user_id。你可能想改變你的遷移,包括:

t.integer :user_id 

然後放下你的表(如果他們有沒有數據!)並重新運行遷移。或者,你可以創建一個新的遷移,並簡單地運行:

add_column :treatments, :user_id, :integer 
+0

你可能想要添加一個索引,我也建議使用'add_reference'。 – unused

+0

我認爲用戶是病人 - 也許has_many:患者,foreign_key:「user_id」。 – Ronna

+0

不是用戶不是病人 – Shahryar

相關問題