2017-05-26 67 views
0

搜索在我的控制器下面的代碼不起作用:如何通過文本中的變量引入nokogiri

@date = (Date.today - 1.day).strftime('%d.%m.%Y').to_s 
doc = Nokogiri::HTML(open("http://www.moex.com/ru/derivatives/contractresults.aspx?code=Si-6.17")) 
row = doc.xpath('//td[contains(text(), "#{@date}")]') 

但是,如果我改變"#{@date}"像「2017年5月25日」真正的約會,一切工作正常:

row = doc.xpath('//td[contains(text(), "25.05.2017")]') 

如何搜索變量中的文本?

+0

首先,你爲什麼用' 「#{@日期和時間}」'時,你可以簡單地只使用'@ date' –

+0

我都試過 「#{@}日期」 和@date無任何成功 – electrify

+0

考慮在單獨的過程中在控制器外部預先準備好並存儲信息以供以後使用。如果網站停工或速度很慢,它會影響您的應用程序的速度,使其看起來像您的代碼是問題。另外,如果這個動作被重複調用,你最終會攻擊另一個站點,可能會被禁止。 –

回答

1

仔細看你的最後一個表達式:

row = doc.xpath('//td[contains(text(), "#{@date}")]') 
       ^        ^

在Ruby only的雙引號字符串"..."允許插值。

row = doc.xpath("//td[contains(text(), '#{@date}')]") 
+0

非常感謝,這個作品! – electrify

+0

「只有雙引號字符串」...「允許插值」小心你如何說:如果'foo ='bar'',那麼前三個是真的。 (#{foo}「#」#{#f#} {#f#} {#foo}## foo}'##foo}''%q(#{foo})#=>「##{foo}」# –

+0

@theTinMan的確如此,'%s'%foo#= >「bar」是插值的一個例子嗎? –