您可以使用send()方法動態調用這些助手或模式函數。該方法來自Ruby,以下是更多信息。 http://apidock.com/ruby/Object/send
在你的情況,你就去做這樣的:
model_name = object.class.to_s.underscore
send("#{model_name}_path", slug)
編輯 爲你的代碼可能是
send("#{model_name}_url", slug, host: ActionMailer::Base.default_url_options[:host])
我想爲你在我的控制檯:
include Rails.application.routes.url_helpers
model_name = User.first.class.to_s.underscore
=> "user"
send("#{model_name}_path", User.first.cached_slug)
=> "/community/user/hummel"
send("#{model_name}_path", User.first.id)
=> "/community/user/1"
作爲請求,你要發送一個主機到該方法
使用_url
,而不是_path
幫手,也給額外的PARAM host
到方法。
send("#{model_name}_url", User.first.cached_slug, host: "google.com")
=>http://google.com/community/user/hummel
我試圖做同樣的事情「# {model_name} _url「,但沒有奏效。您的解決方案可行,但我如何將主機添加到此代碼? post_url(slug,host:ActionMailer :: Base.default_url_options [:host]) – kirqe