0

我需要为每个具有电子邮件参数的用户(管理部分)调用方法。这是在 PayPal 中付款的功能,但在某些情况下我不能使用重定向。

我认为payments.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

我认为您应该以表格而不是链接来处理此问题。

如果支付是一种与用户对象相关联的方法,那么您可能需要执行以下操作:

看法 -

<%= 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 回答
1

响应实例方法不是控制器的工作。响应请求是控制器的工作。

因此,您希望能够链接到响应 mydomain.com/users/1/pay 或类似内容的操作。

在路线中

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 回答