在我的应用程序中,我有各种资源,我想通过多个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方法吗?
答案 0 :(得分:1)
RESTful是关于资源的。那么你确定系统中的“付款”和“发票”资源是一样的吗?对我而言,它更像是系统设计问题,而不是路由问题。
另一个想法是使用嵌套资源。您可以查看“/ payments /:id / invoices”或“/ invoices /:id / payments”,这对我来说都很有意义。
严