亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

可以在模型中使用Rails路由助手(即mymodel_path(模型))嗎?

可以在模型中使用Rails路由助手(即mymodel_path(模型))嗎?

米琪卡哇伊 2019-07-29 11:04:14
可以在模型中使用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。


查看完整回答
反對 回復 2019-07-29
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

您可能還會發現以下方法比包含每種方法更清晰:

class Thing
  delegate :url_helpers, to: 'Rails.application.routes' 

  def url
    url_helpers.thing_path(self)
  endend


查看完整回答
反對 回復 2019-07-29
  • 3 回答
  • 0 關注
  • 691 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號