это мои 3 моделей:Рубин на 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.
Благодаря ответам, я уже пришел с этой проблемой, добавив ссылочный столбец. теперь я не получаю, но он не сохраняет никаких обработок. i означает часть:
if @treat.save
flash[:success] = "new treatment added"
redirect_to root_url
else
render 'new'
end
не сохраняет и просто визуализирует «новое».
У меня есть 2 вопроса:
1-, как я могу создать код своего контроллера?
2 Как получить мою базу лечения на пациента. Какую переменную я должен определить в методе «показать» моим пациентом, чтобы получить лечение?
В таблице 'treatment' должно быть' user_id'. – Pavan
Как его добавить? – Shahryar
Используйте переход, чтобы добавить user_id как @Pavan, написанный в комментарии раньше, вы можете использовать ссылку там, например 'add_reference: treatment,: user, index: true'. – unused