Nokogiri形象从局部攫取?

时间:2013-10-01 08:18:17

标签: ruby-on-rails ruby ruby-on-rails-3 nokogiri

我正在尝试获取索引页面的图像。我想让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"
显然,我错过了一些东西。有任何想法吗?我甚至可以在视图中定义变量吗?我没有看到我可以在哪里声明它。


更新:

我尝试将逻辑移到模型中:

design.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 action

中致电update action

design.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

同样的问题,超时。它在控制台中工作正常。我只是不明白。

1 个答案:

答案 0 :(得分:0)

每当您加载partial时,您都必须手动传递使用过的参数。在你的情况下,它将是这样的:

render :partial => 'designs/design', :locals => { :design => design }
                       |        |                    |         |
                   view folder  |     variable used in partial |
                                |                              |
                          partial name               current name of variable