Ruby Rails,重定向后参数丢失

Ruby On Rails, params lost after redirect

我有一个用户支付费用的页面,在提交时被重定向到显示已完成付款的同一页面。我在重定向时传递了 id,但它丢失了导致错误。

控制器动作如下:

def pay_all_fees 

    @target_action='pay_all_fees'
    @target_controller='parent_wise_fee_payments'
        if params[:id].present?
      id = params[:id]
      else id = 4

       end

      @students=Student.find_all_by_sibling_id(Guardian.find(id).ward_id)
      @guardian = Guardian.find(id)
      @students.each do |student|
            fetch_all_fees

      end

      if request.post?
      status=true
      MultiFeesTransaction.transaction do
        multi_fees_transaction= MultiFeesTransaction.create(params[:multi_fees_transaction])
        begin
          finance_transactions=FinanceTransaction.create!(params[:transactions].values)
        rescue Exception => e
          status=false
        end

        if status and (multi_fees_transaction.valid? && finance_transactions.all?(&:valid?))
          multi_fees_transaction.finance_transactions=finance_transactions
          flash[:notice]="#{t('fees_paid')}"
        else
          flash[:notice]="#{t('fee_payment_failed')}"
          raise ActiveRecord::Rollback
        end
      end
      redirect_to :controller => 'parent_wise_fee_payments', :action => 'pay_all_fees', :id=>id
    end
      get_paid_fees
   end

这是生产日志中的错误:

Processing ParentWiseFeePaymentsController#pay_all_fees (for 178.135.80.106 at 2015-08-03 13:11:29) [POST]
  Parameters: {"multi_fees_transaction"=>{"student_id"=>"4", "payment_mode"=>"Cash", "payment_note"=>"", "amount"=>"500.00", "transaction_date"=>"2015-08-03"}, "controller"=>"parent_wise_fee_payments", "transactions"=>{"4"=>{"payee_type"=>"Student", "title"=>"Receipt No.. (Multiple Fees) F3", "payment_mode"=>"Cash", "finance_id"=>"3", "category_id"=>"14", "payment_note"=>"", "payee_id"=>"4", "amount"=>"", "finance_type"=>"FinanceFee", "transaction_date"=>"2015-08-03"}, "2"=>{"payee_type"=>"Student", "title"=>"Receipt No.. (Multiple Fees) F3", "payment_mode"=>"Cash", "finance_id"=>"3", "category_id"=>"14", "payment_note"=>"", "payee_id"=>"1", "amount"=>"500", "finance_type"=>"FinanceFee", "transaction_date"=>"2015-08-03"}}, "action"=>"pay_all_fees", "authenticity_token"=>"ns37sH/tD/0i5PyMLGfG6bzEb2SHgjwJQGMuV3i3cNE=", "transaction_date"=>"2015-08-03"}
Username : admin Role : Admin
Rendering template within layouts/application
Rendering parent_wise_fee_payments/pay_all_fees

ActionView::TemplateError (undefined method `full_name' for nil:NilClass) on line #31 of vendor/plugins/acme_parent_wise_fee_payment/app/views/parent_wise_fee_payments/pay_all_fees.html.erb:
28:       <div class="val themed_text">
29:         <span>:</span>
30:           <div class="val-align">
31:             <%= @guardian.full_name %>
32:           </div>
33:       </div>
34: 

所以重定向后id为null。您可以从生产日志中注意到,在操作 "pay_all_fees" 之后,id 丢失了。你能帮我解决这个问题吗?例如,有没有办法强制传递带有真实性令牌的 ID?

更新:

在进入此页面之前,用户搜索监护人,因此我将 id 从搜索页面传递到当前页面。现在我在重定向后需要这个相同的 ID,我只是不知道如何。

中的id变量
redirect_to :controller => 'parent_wise_fee_payments', :action => 'pay_all_fees', :id=>id

当请求为 post 时无法访问 ID。在 if request.post?区块

if request.post?
if params[:id].present?
  id = params[:id]
end
the rest of your code
end

试试这个:

 if request.post?
        student_id=params[:multi_fees_transaction]["student_id"]
..........
      redirect_to :controller => 'parent_wise_fee_payments', :action => 'pay_all_fees', :student_id=>student_id

这样你就可以用student_id来获取id什么的了