Rails: 将一个变量从一个控制器传递到另一个控制器用于两种形式
Rails: Passing a variable from one controller to another for two forms
我有两种模型:一种用于患者,一种用于转诊请求。我创建了两种形式 - 一种允许用户创建新患者,另一种允许用户创建转诊请求。一个患者可以有多个转诊请求,一个转诊请求将属于创建它的用户以及为其创建的患者。
我无法弄清楚如何 link 这些表格以一种在患者和用户为他们创建的转诊请求之间建立关联的方式。我想我必须在推荐请求控制器的新操作或创建操作中添加一些东西,但我无法得到我尝试工作的任何东西。
任何新手帮助不胜感激!
患者控制员:
class PatientsController < ApplicationController
def new
@patient = current_user.patients.build
end
def create
@patient = current_user.patients.build(patient_params)
if @patient.save
flash[:success] = "Patient Created!"
redirect_to '/referral_requests/new'
else
Rails.logger.info(@patient.errors.inspect)
render 'patients/new'
end
end
private
def patient_params
params.require(:patient).permit(:age, :user_id, insurance_ids: [], gender_ids: [], concern_ids: [], race_ids: [])
end
end
推荐请求控制器:
class ReferralRequestsController < ApplicationController
before_action :logged_in_user, only: [:show, :index, :new, :create, :edit, :update, :destroy]
def index
if logged_in?
@referral_request = current_user.referral_requests.build
@feed_items = current_user.feed.paginate(page: params[:page])
else
@feed_items =[]
end
end
def create
@referral_request = current_user.referral_requests.build(referral_request_params)
if @referral_request.save
flash[:success] = "Referral Request Created!"
render 'referral_requests/index'
else
Rails.logger.info(@referral_request.errors.inspect)
@feed_items = []
render 'static_pages/home'
end
end
def destroy
end
def new
@referral_request = current_user.referral_requests.build if logged_in?
end
private
def referral_request_params
params.require(:referral_request).permit(:content, concern_ids: [],
insurance_ids: [], race_ids: [], language_ids: [], gender_ids: [])
end
end
您需要在 PatientsController 的创建操作中的重定向中传入 patient_id。
redirect_to '/referral_requests/new'
应该变成
redirect_to new_referral_request_path(patient_id: @patient.id)
然后在 ReferralRequestsController 中,您可以将新建的 referral_request 与患者相关联
def new
@patient = Patient.find(params[:patient_id])
@referral_request = current_user.referral_requests.build(patient: @patient) if logged_in?
end
然后在您的 referral_requests/new.html.erb 表单中您可以添加一个 hidden_field_tag
form_for(@referral_request) do |f|
f.hidden_field :patient_id
.....
end
然后将 patient_id 添加到表单参数中并获取在控制器的新操作中关联的 patient_id
您还需要将 :patient_id 添加到您的 referral_request_params 方法中
我有两种模型:一种用于患者,一种用于转诊请求。我创建了两种形式 - 一种允许用户创建新患者,另一种允许用户创建转诊请求。一个患者可以有多个转诊请求,一个转诊请求将属于创建它的用户以及为其创建的患者。
我无法弄清楚如何 link 这些表格以一种在患者和用户为他们创建的转诊请求之间建立关联的方式。我想我必须在推荐请求控制器的新操作或创建操作中添加一些东西,但我无法得到我尝试工作的任何东西。
任何新手帮助不胜感激!
患者控制员:
class PatientsController < ApplicationController
def new
@patient = current_user.patients.build
end
def create
@patient = current_user.patients.build(patient_params)
if @patient.save
flash[:success] = "Patient Created!"
redirect_to '/referral_requests/new'
else
Rails.logger.info(@patient.errors.inspect)
render 'patients/new'
end
end
private
def patient_params
params.require(:patient).permit(:age, :user_id, insurance_ids: [], gender_ids: [], concern_ids: [], race_ids: [])
end
end
推荐请求控制器:
class ReferralRequestsController < ApplicationController
before_action :logged_in_user, only: [:show, :index, :new, :create, :edit, :update, :destroy]
def index
if logged_in?
@referral_request = current_user.referral_requests.build
@feed_items = current_user.feed.paginate(page: params[:page])
else
@feed_items =[]
end
end
def create
@referral_request = current_user.referral_requests.build(referral_request_params)
if @referral_request.save
flash[:success] = "Referral Request Created!"
render 'referral_requests/index'
else
Rails.logger.info(@referral_request.errors.inspect)
@feed_items = []
render 'static_pages/home'
end
end
def destroy
end
def new
@referral_request = current_user.referral_requests.build if logged_in?
end
private
def referral_request_params
params.require(:referral_request).permit(:content, concern_ids: [],
insurance_ids: [], race_ids: [], language_ids: [], gender_ids: [])
end
end
您需要在 PatientsController 的创建操作中的重定向中传入 patient_id。
redirect_to '/referral_requests/new'
应该变成
redirect_to new_referral_request_path(patient_id: @patient.id)
然后在 ReferralRequestsController 中,您可以将新建的 referral_request 与患者相关联
def new
@patient = Patient.find(params[:patient_id])
@referral_request = current_user.referral_requests.build(patient: @patient) if logged_in?
end
然后在您的 referral_requests/new.html.erb 表单中您可以添加一个 hidden_field_tag
form_for(@referral_request) do |f|
f.hidden_field :patient_id
.....
end
然后将 patient_id 添加到表单参数中并获取在控制器的新操作中关联的 patient_id
您还需要将 :patient_id 添加到您的 referral_request_params 方法中