Ruby on rails Nokogiri从局部图像抓取图像?
我正在尝试为索引页获取图像。我想让Nokogiri进入每个设计的页面,抓取正文中的第一张图片,并将这些图片提供给我,供我在部分设计中使用。在控制台中,这非常有效。在我的实际观点中,它超时了 _design.html.hamlRuby on rails Nokogiri从局部图像抓取图像?,ruby-on-rails,ruby,ruby-on-rails-3,nokogiri,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']})"} 看
- 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
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
出于测试目的对URL进行硬编码,然后在部分中更改为:
%li.well.blur{style: "background-image: url(#{design.first_image})"}
但我也有同样的问题,超时
更新: 我在模型中保留了逻辑,甚至为信息添加了一列,然后将调用全部从设计部分中移除。现在,我调用
@design.first_image
在create action
和update action
中
design.rb:
def first_image
doc = Nokogiri::HTML(open("`http://localhost:3000/designs/1`"))
doc.at_css('.well img')['src']
end
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
同样的问题,超时。不过,它在控制台中运行良好。我就是不明白。无论何时加载
部分
,都必须手动传递使用的参数。在您的情况下,它将类似于:
render :partial => 'designs/design', :locals => { :design => design }
| | | |
view folder | variable used in partial |
| |
partial name current name of variable
您如何将
design
变量传递给您的partial?这一点依赖rails的魔力。控制器是designs\u Controller.rb
,模型是design.rb
,所以我在views/designs
中有\u design.html.haml
部分。把它传递给控制器是个好主意,你能在你的新部分中使用设计变量吗?更新。。。仍然有问题我想这比我能更好地解释这条捷径。我的问题不是我不能访问design
变量,而是我问题第一部分中的doc
变量。真正的问题是,为什么nokogiri在控制台中工作良好,而不是在视图中?