第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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


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

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


查看完整回答
反對 回復(fù) 2019-07-29
  • 3 回答
  • 0 關(guān)注
  • 703 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)