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

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

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