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 方法中