das sind meine drei Modelle:Ruby on Rails has_many: durch Vereinigung Controller
Modell für Benutzer:
class User < ActiveRecord::Base
has_many :patients, through: :treatments
has_many :treatments
.
.
.
Modell für Patienten:
class Patient < ActiveRecord::Base
has_many :user, through: :treatments
has_many :treatments, dependent: :destroy
.
.
.
Modell für die Behandlung:
class Treatment < ActiveRecord::Base
belongs_to :patient
belongs_to :user
validates :patient_id, presence: true
default_scope -> { order(created_at: :desc) }
end
Und das ist mein Behandlungstisch:
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
jetzt möchte ich einen Controller definieren, eine neue Behandlung zu erstellen, die auf einen bestimmten Benutzer des Patienten gehört.
das ist mein Controller:
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
aber dies ist der Fehler, die ich erhalte, während ich eine neue Behandlung erstellen möchten:
ActiveRecord::UnknownAttributeError in TreatmentsController#create
unknown attribute 'user_id' for Treatment.
und dies ist der 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
Ich bin neu bei Schienen, die Grundidee ist, dass ich möchte, dass mein Benutzer eine Behandlung erhält, die zu einem bestimmten Patienten gehört ent.
Dank der Antworten habe ich dieses Problem gelöst, indem ich eine Referenzspalte hinzugefügt habe. Jetzt bekomme ich keine, aber es spart keine Behandlungen. Ich meine, das Teil:
if @treat.save
flash[:success] = "new treatment added"
redirect_to root_url
else
render 'new'
end
es nicht retten und macht nur ‚neu‘.
ich habe 2 Fragen:
1-, wie kann ich meine Controller-Code erstellen?
2- Wie erhalte ich meine Behandlungsbasis auf patient.what variable sollte ich in meiner Patienten "show" -Methode definieren, um ihre Behandlungen abrufen zu lassen?
Sie sollten 'user_id' in' treatments' Tabelle haben. – Pavan
wie man es hinzufügt? – Shahryar
Verwenden Sie eine Migration, um die Benutzer-ID hinzuzufügen, wie @Pavan zuvor in den Kommentar geschrieben hat. Sie können eine Referenz wie 'add_reference: treatments,: user, index: true' verwenden. – unused