我需要为每个用户(管理员部分)调用方法,该方法有电子邮件参数。它是在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函数吗?
答案 0 :(得分: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) %>
答案 1 :(得分: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
的更多说明