Rails 选取文章中第一张图片,如何写的更优雅一点

tiseheaini · 2014年02月08日 · 最后由 kgtonglousy 回复于 2014年02月13日 · 2761 次阅读

controller 中 @topics = Topic.limit(15).order('id desc')

views 中 <%= render :partial => 'article', :collection => @topics

_article.html.erb 中会用 Nokogiri 解析出一张图片

<%= image_tag Nokogiri::HTML(article.body).css('img').first['src'] %>

如果文章中没有图片就悲催了,Nokogiri::HTML(article.body).css('img') 为空,也就不存在 ['src']

现在只能这样写

<div class="h-topic-image">
    <% if Nokogiri::HTML(article.body).css('img').empty? %>
        <% image = '/uploads/image/201306/0faab1669697.jpg' %>
     <% else %>
       <% image = Nokogiri::HTML(article.body).css('img').first['src'] %>
    <% end %>
    <%= image_tag image %>
</div>

有没有方法把代码写的好看一点

用正则就可以了啊截取 <img

尝试给个方法:

<% images = Nokogiri::HTML(article.body).css('img') %>
<% image = images.empty? ? '/uploads/image/201306/0faab1669697.jpg' : images.first['src'] %>
<%= image_tag image %>
<%= image_tag Nokogiri::HTML(article.body).css('img').first.try('[]', 'src') || '/uploads/image/201306/0faab1669697.jpg' %>

解析文章内容的解法挺蛋疼!

我的推荐解法是:给文章添加一个 image 字段来存储文章头图,carrierwave 可以轻松搞定;如果你不需要头图,仅仅获取文章正文中添加的图片,也可以通过 kindeditor,让 article 在提交时就与正文里面的图片关联起来,获取这些关联图片也很轻松。

一般喜欢用 ||

<%= image_tag article_first_image_url(article) %>
module ArticlesHelper
  def article_first_image_url(article)
    ...
  end
end

谢谢大家,我觉得 @Rei 的方法更好,不过先在数据库添加一个字段保存图片,然后没有图片的文章就用 helper 来解析出图片

@Rei +1,但是拼写有误。

9 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号