【发布时间】:2011-08-04 00:20:55
【问题描述】:
在我的应用中,我想通过多个 URL 访问各种资源。例如,可以通过以下方式访问发票:
/invoices/:id
由发票开具人,也可通过:
/pay/:payment_key
由付款人。
后一个 URL 不需要身份验证(因此是加密的 payment_key)。
问题是如何获取自定义 URL 的自动 URL 帮助方法。通常您可以使用to_param 来自定义资源 URL(如 here 所述),但在这种情况下这还不够,因为我仍想保留默认资源 URL。
如果我通过声明命名路由来创建辅助方法:
/pay/:payment_key, :as => :invoice_payment
然后我希望invoice_payment_url(invoice) 包含invoice.payment_key,但它没有。 Rails 使用发票 ID 代替(类似于 here 报告的行为)
这个好像坏了。
所以我一直在为这个资源手动定义 url 助手。
def invoice_payment_path (invoice)
url_for :controller => "invoices",
:only_path => true,
:action => "pay",
:payment_key => invoice.payment_key
end
def invoice_payment_url (invoice)
url_for :controller => "invoices",
:only_path => false,
:action => "pay",
:payment_key => invoice.payment_key
end
想知道是否有 DRYer 方法可以做到这一点?
【问题讨论】: