我正在尝试获取索引页面的图像。我想让 Nokogiri 进入每个设计的页面,获取正文中的第一张图片,然后将这些图片提供给我以供局部使用。在控制台中,这很好用。在我的实际视图中,它超时了。
_design.html.haml
- doc = Nokogiri::HTML(open("#{design_url(design)}"))
%li.well.blur{style: "background-image: url(#{doc.at_css('.well img')['src']})"}
看看我想做什么?在索引中,我正在做一个标准= render @designs
,并认为,当它循环遍历每个设计时,它将运行 Nokogiri 命令,从每个变量分配图像 url,更改并继续。
在控制台中:
doc = Nokogiri::HTML(open("http://localhost:3000/designs/1"))
doc.at_css('.well img')['src']
快速返回:
=> "http://www.cs.uofs.edu/~olivetoj2/blah.jpg"
显然,我错过了一些东西。有任何想法吗?我什至可以在视图中定义一个变量吗?我看不出我还能在哪里声明它。
更新:
我尝试将逻辑移至模型:
设计.rb:
def first_image
doc = Nokogiri::HTML(open("`http://localhost:3000/designs/1`"))
doc.at_css('.well img')['src']
end
出于测试目的对 URL 进行硬编码,然后部分更改为:
%li.well.blur{style: "background-image: url(#{design.first_image})"}
但是我遇到了同样的问题,超时。
更新:
我将逻辑保留在模型中,甚至为信息添加了一列,然后将设计部分的调用全部取出。现在,我调用@design.first_image
和create action
。update action
设计.rb:
def first_image
doc = Nokogiri::HTML(open("http://localhost:3000/designs/#{self.id}"))
self.update_attribute(:photo_url, doc.at_css('.well img')['src'])
end
同样的问题,超时。它在控制台中运行良好。我只是不明白。