我正在構建具有merchant
子域的Rails應用程序。我有這兩條路線:檢查給定路線以確定它是否具有子域限制
get '/about', controller: :marketing, action: :about, as: :about
get '/about', controller: :merchant, action: :about, constraints: { subdomain: 'merchant' }, as: :merchant_about
但是當我用自己的URL傭工都merchant_about_url
和about_url
結果http://example.com/about
。
我知道我可以在幫助器上指定subdomain
參數來爲子網域添加URL前綴,但由於這些URL在各種情況下都會經常使用,所以我想爲這個幫助器構建一個包裝器聰明。
我的問題:我可以檢查給定的路線,看看它是否有子域約束?
如果可以,我想這樣做如下:
def smart_url(route_name, opts={})
if # route_name has subdomain constraint
opts.merge!({ subdomain: 'merchant' })
end
send("#{route_name}_url", opts)
end
在這樣做,我可以有效地打電話:
smart_url('about') # http://example.com/about
smart_url('merchant_about') # http://merchant.example.com/about
這可能嗎?
這是完美的!非常感謝你:)如果你有一分鐘的時間,我會遇到一個問題,opts可以是AR模型而不是散列。例如'user_url(@user)'('smart_url('user',@user)')。我無法追加'subdomain'參數。有什麼想法嗎? –
@JodyHeavener - 請檢查我更新的答案。您可以手動對這種情況進行類型檢查。 – 31piy