gpt4 book ai didi

ruby-on-rails - 为什么 link_to 在访问 View 时在其中运行一个方法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:40 25 4
gpt4 key购买 nike

我在 View 中有这个链接:

  <%= link_to "Pay in PayPal", @order.paypal_url(edit_order_url, payment_notification_url), class: "btn btn-success" %>

模型中:

 class Order < ActiveRecord::Base
def paypal_url(return_url, notify_url)
# ... Do stuff
self.update_attribute(:payment_in_process, true)
# Do more stuff...
end



当我访问 View 时,模型会更新其属性。我不想要这个。我只希望在单击链接时更新属性。

知道如何完成这个吗?

最佳答案

让我先简单介绍一下 link_to 方法。根据api , 此方法使用由一组 options 创建的 URL 创建给定 name 的链接标记:

link_to(name = nil, options = nil, html_options = nil, &block) 

在您的特定情况下,name 是“Pay in PayPal”,这是一个纯字符串。第二个参数 URL 有点复杂,因为您没有传递任何类型的网站内容的绝对或相对路径,而是调用对象上的方法:

@order.paypal_url(edit_order_url, payment_notification_url)

这里发生的是特定方法 paypal_url 被立即调用,并且 link_to 期望此方法返回正确的 URL。文档中熟悉的示例也会发生同样的情况,例如:

link_to "Profile", profile_path(@profile)
# => <a href="/profiles/1">Profile</a>

这里的 profile_path 是一个接受参数以获取其唯一的 id 的方法,因此能够生成正确的路径。同样的规则适用于此:只要用户请求带有链接的页面,就会调用此方法。

因此,首先要做的是从 paypal_url 方法中删除与点击后处理相关的所有内容。

但是您希望在单击链接后使这些功能起作用。实际上,关于用户是否单击链接的决定是在 Controller 层中做出的。简单地说,如果调用 Controller 操作,那么您就知道用户单击了链接。

因此第二步是向您的内部 Controller 操作发出某种请求,并将相关逻辑放在那里。如果 paypal_url 将用户引导至您的内部网站页面,您可能已经实现了该操作。另一方面,您的 paypal_url 可能会指向外部页面,如实际的 paypal 处理...在这种情况下,您可以通过重定向或 ajax 请求实现相同的目的。

关于ruby-on-rails - 为什么 link_to 在访问 View 时在其中运行一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com