0

ユーザーが電子ドキュメントに署名した後?document_key=2343t8ujjf、リダイレクト先に追加されました。url(index of my Partners Controller)

これを index メソッドのクラス変数に格納しています。ただし、属性を更新する前に使用する必要があり、IDがサーバーを介して渡されないため、インデックス@partner = Partner.find(params[:id])を呼び出すことができないため、新しいキーを実際にデータベースに保存するには、別のメソッド(ここでは表示)を使用する必要があります。@partner = Partner.find(params[:id])その方法。

もちろん、params[:id]現在存在する ID に置き換えることはできますが、それは非常に悪い習慣です。ボタンから手動で show を呼び出したくありませんが、インデックスから自動的に呼び出しても、ID が必要です。

これを回避する方法はありますか?

class PartnersController < ApplicationController
# GET /partners
# GET /partners.json

def index

  @@agreement_key = params[:documentKey]
  logger.info "Key: #{@@agreement_key}"

  @partners = Partner.all

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @partners }
  end

  show # could also just paste parts of show into index but same problem
       # other than being able to then use just ivar.

end

# GET /partners/1
# GET /partners/1.json
def show
  @partner = Partner.find(params[:id])
     logger.info "Key: #{@@agreement_key}"
     @partner.update_attributes(
        {
          :agreement_key => @@agreement_key
        }
      )
  respond_to do |format|
    format.html do 
      redirect_to signed_path( partner_id: @partner.id )
    end
    format.json { render json: @partner }
  end
end
4

1 に答える 1

1

に値を格納する必要がありますsession

クラス変数を使用すると、複数のユーザーがいる場合、後続のリクエストでユーザーが異なるワーカーに接続する場合、リクエスト間でサーバーを再起動する場合など、いくつかの問題が発生します。

セッション ストレージの詳細については、http: //guides.rubyonrails.org/action_controller_overview.html#sessionを参照してください。

于 2013-02-15T10:32:15.030 に答える