如何将变量从实例方法传递到控制器?

时间:2012-07-19 18:34:28

标签: ruby-on-rails actionview actioncontroller

我需要为每个用户(管理员部分)调用方法,该方法有电子邮件参数。它是在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函数吗?

2 个答案:

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

的更多说明
相关问题