【问题标题】:Rails: Passing a variable from one controller to another for two formsRails:以两种形式将变量从一个控制器传递到另一个控制器
【发布时间】:2017-08-31 13:29:02
【问题描述】:

我有两种模型:一种用于患者,另一种用于转诊请求。我创建了两种表格——一种允许用户创建新患者,另一种允许用户创建转诊请求。一个患者可以有许多转诊请求,并且一个转诊请求将属于创建它的用户以及为其创建它的患者。

我无法弄清楚如何将这些表格链接在一起,从而在患者和用户为他们创建的转诊请求之间建立关联。我想我必须在新的或创建推荐请求控制器的操作中添加一些东西,但我无法得到任何我尝试过的东西。

对新手的任何帮助表示赞赏!

患者控制者:

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

【问题讨论】:

    标签: ruby-on-rails forms controllers


    【解决方案1】:

    您需要在 PatientController 的创建操作中的重定向中传入患者 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
    

    然后在您的推荐请求/new.html.erb 表单中,您可以添加一个 hidden_​​field_tag

    form_for(@referral_request) do |f|
      f.hidden_field :patient_id
      .....
    end
    

    然后将 patient_id 添加到表单参数中,并获取在控制器的新操作中关联的 patient_id

    您还需要将 :patient_id 添加到您的 refer_request_params 方法中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多