0

メールパラメーターを持つ各ユーザー(管理者部分)のメソッドを呼び出す必要があります。PayPalで支払うための機能なのですが、例によってリダイレクトが使えません。

私の見解のコード payment.erb:

 % @users.each do |user| %>
<li>
  <%= user.email %>
  <%= link_to "Pay", user.pay(user.email) %>
</li>

支払方法コード

def pay email
//making post request to PayPal
//res = clnt.post(uri, data, header)
//if res.status ==200
//redirect_to PayPal
//else redirect_to :back
end

パラメータを渡す方法、またはこれをすべて再編成するにはどうすればよいですか? ページコントローラーでアクションを作成する必要がありますか、それとも after_call_pay 関数を使用できますか?

4

2 に答える 2

1

インスタンス メソッドに応答するのはコントローラーの仕事ではありません。リクエストに応答するのはコントローラーの仕事です。

したがって、mydomain.com/users/1/pay などに応答するアクションに link_to できるようにする必要があります。

ルート内

resources :users do
  member do
    post 'pay'
  end
end

次に、コントローラーで

def pay
  @user = User.find(params[:id])
  #route user to paypal or somewhere else based on some condition
end

そして最後にビューで

<%= link_to "Pay", pay_user_path(user) %>
于 2012-07-19T18:53:57.803 に答える
1

これはリンクではなくフォームで処理する必要があると思います。

支払いがユーザー オブジェクトに関連付けられたメソッドである場合は、次のようにします。

意見 -

<%= form_for @user, :url => { :action => "make_payment" } do |f| %>
    #any form fields associated with making the payment (ie credit card number)
    <%= f.submit %>
<% end %>

これにより、フォームが Users_controller と「make_payment」という名前のアクションにルーティングされます。標準のリソースフル ルーティングを使用している場合は到達できないため、config/routes ファイルでこのアクションへのルートを必ず指定してください。

コントローラ -

def make_payment
   @user = User.find(params[:id])
   user.submit_payment(params[:credit_card_num])
   redirect_to @user
end

それはあなたが探していることを達成するはずです。Railsフォームヘルパーの詳細については、こちらを確認してください http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

于 2012-10-04T03:38:50.913 に答える