0

我正在尝试获取索引页面的图像。我想让 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_imagecreate actionupdate 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

同样的问题,超时。它在控制台中运行良好。我只是不明白。

4

1 回答 1

0

每当您加载 apartial时,您都必须手动传递使用的参数。在您的情况下,它将类似于:

render :partial => 'designs/design', :locals => { :design => design }
                       |        |                    |         |
                   view folder  |     variable used in partial |
                                |                              |
                          partial name               current name of variable
于 2013-10-01T09:00:46.633 回答