這些都是我的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-如何根據患者檢索我的治療方案。我應該在患者「放映」方法中定義哪些變量以便檢索其治療方案?
你應該在'處理器'表中有'user_id'。 – Pavan
如何添加? – Shahryar
使用遷移將user_id添加爲@Pavan之前在評論中寫的,您可以使用像add_reference:treatments,:user,index:true這樣的引用。 – unused