2017-05-26 22 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”是插值的一个例子吗? –