可以在模型中使用Rails路由助手(即mymodel_path(模型))嗎?假設(shè)我有一個(gè)名為Thing的Rails模型。Thing有一個(gè)url屬性,可以選擇將其設(shè)置為Internet上的某個(gè)URL。在視圖代碼中,我需要執(zhí)行以下操作的邏輯:<% if thing.url.blank? %><%= link_to('Text', thing_path(thing)) %><% else %><%= link_to('Text', thing.url) %><% end %>視圖中的這種條件邏輯很難看。當(dāng)然,我可以構(gòu)建一個(gè)輔助函數(shù),它會(huì)將視圖更改為:<%= thing_link('Text', thing) %>這解決了冗長問題,但我真的更喜歡模型本身的功能。在這種情況下,視圖代碼將是:<%= link_to('Text', thing.link) %>顯然,這需要模型上的鏈接方法。這是它需要包含的內(nèi)容:def link (self.url.blank?) ? thing_path(self) : self.urlend就問題而言,thing_path()是Model代碼中未定義的方法。我假設(shè)可以將一些輔助方法“拉入”模型中,但是如何?是否有一個(gè)真正的原因,路由只在控制器上運(yùn)行并查看應(yīng)用層?我可以想到許多模型代碼可能需要處理URL(與外部系統(tǒng)集成等)的情況。
3 回答

慕無忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
我自己找到了關(guān)于如何做到這一點(diǎn)的答案。在模型代碼中,只需:
對于Rails <= 2:
include ActionController::UrlWriter
對于Rails 3:
include Rails.application.routes.url_helpers
這奇怪地thing_path(self)
返回當(dāng)前事物的URL,或other_model_path(self.association_to_other_model)
返回一些其他URL。

小怪獸愛吃肉
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
您可能還會(huì)發(fā)現(xiàn)以下方法比包含每種方法更清晰:
class Thing delegate :url_helpers, to: 'Rails.application.routes' def url url_helpers.thing_path(self) endend
- 3 回答
- 0 關(guān)注
- 703 瀏覽
添加回答
舉報(bào)
0/150
提交
取消