我正在尝试获取索引页面的图像。我想让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_image
和create 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
同样的问题,超时。它在控制台中工作正常。我只是不明白。
答案 0 :(得分:0)
每当您加载partial
时,您都必须手动传递使用过的参数。在你的情况下,它将是这样的:
render :partial => 'designs/design', :locals => { :design => design }
| | | |
view folder | variable used in partial |
| |
partial name current name of variable