在我的應用程序中,我有多種想要通過多個URL訪問的資源。例如,發票可以通過以下方式訪問:沒有ID的Rails 3資源的多個自定義URL
/invoices/:id
通過發票的發行者,並且還通過:
/pay/:payment_key
由付款人。
後一個URL不需要驗證(因此支付的密鑰已經分開)。
問題是如何獲取自定義URL的自動URL助手方法。通常情況下,您可以使用to_param
來自定義資源URL(如here所述),但在這種情況下這還不夠,因爲我仍然想保留默認資源URL。
如果我創建的helper方法通過聲明名爲路線:
/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方式來做到這一點?
我同意,但ID OP還是要遵循這條路線'invoice_payment_path(:payment_key => invoice.payment_key)'會的工作。 – rubish
@gzbigegg謝謝。同意他們是不同的資源,但這不是問題。我仍然希望從發票中創建付款,並且需要url助手爲我提供基於發票模型的網址。問題是用什麼鍵來標識資源。出於安全原因,我需要兩個。 –
@Rubish好吧,但這會將創建正確URL的責任轉移給調用者。這對我來說很難受。 –