2

私はライアンベイツのレールキャスト146をフォローしていますが、それは本当に役に立ちます。ただし、カートオブジェクトをプロセスから削除しようとしており、注文を個別に処理するだけです。私が抱えている問題は、2回使用される量をどのように設定するかです。1回は購入の設定に、もう1回は実際に実行するためです。これは私がやろうとしていることですが、return_urlの量が明らかになります。これは、おそらく悪い習慣だと思います。

class OrdersController < ApplicationController
  def express
    response = EXPRESS_GATEWAY.setup_purchase(params[:amount],
      :ip                => request.remote_ip,
      :return_url        => new_order_url(:amount=>params[:amount]),
      :cancel_return_url => root_url
    )
    redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token)
  end

  def new
    @order = Order.new(:express_token => params[:token], :price_in_cents=>params[:amount])
  end

次に、ビューで、注文が作成されたときに金額が組み込まれるように、金額を含む非表示フィールドを追加します(注文モデルにprice_in_centsフィールドを追加しました)。正常に動作しますが、量をパラメータとして公開するのは少し難しいかもしれません。最後に、購入コードは次のようになります。

 def purchase
    response = process_purchase
    transactions.create!(:action => "purchase", :amount => price_in_cents, :response => response)
    cart.update_attribute(:purchased_at, Time.now) if response.success?
    response.success?
  end

要するに、パラメータで金額を渡さずにこれを行うにはどうすればよいですか?

ありがとう!

4

2 に答える 2

0

URLで金額を送信することは、非常に悪い習慣です。これにより、価格を変更して、URLで指定した金額で販売しているものを購入することができます。

この問題を回避する方法は2つあります
。1。渡したパラメーターを暗号化し、URLから復号化できます。ここで暗号化する方法を参照してください
。2。購入価格を保持する新しいエンティティを作成できます(または特定のアイテムを販売している場合(カートを使用していないため)-このアイテムのIDを渡してクエリを実行できます必要なときの価格です)。このようなもの:

class OrdersController < ApplicationController
  def express
    @product = Product.find(params(:product_id));
    response = EXPRESS_GATEWAY.setup_purchase(product.price_in_cents,
      :ip                => request.remote_ip,
      :return_url        => new_order_url(product.price_in_cents),
      :cancel_return_url => root_url
    )
    redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token)
  end

  def new
    @product = Product.find(params(:product_id));
    @order = Order.new(:express_token => params[:token], :price_in_cents=> @product.price_in_cents)
  end

于 2011-01-10T13:06:53.780 に答える
0

入力してくれてありがとう。結局、ユーザーのセッションに金額を保存し、プロセスが終了するとすぐににsession[:amount]設定しました。nilそうすれば、ユーザーから隠され、新しいオブジェクトを作成したり暗号化したりする手間が省けます。

于 2011-01-10T18:41:28.317 に答える