如何检查模型是否有Carrierwave的照片?

时间:2014-09-25 23:43:23

标签: ruby-on-rails ruby-on-rails-4 carrierwave

我有一个模型 - Post - 可以有图像&上传到他们的文件。 Carrierwave中的两个不同的上传者。

我想要做的是,只需检查对象上是否有照片上传,如果检测到,我会显示图片标签。但如果不是,那就什么都没有了。

我试过了:

<% if post.photo %>
    <%= image_tag post.photo, size: "52", :class => 'entry-avatar' %>
<% end %>

但这不起作用,它总是显示出来:

<img class="entry-avatar" height="52" src width="52">

如果它不是空白,则会正确地将文件路径添加到src属性。

如果我尝试检查photo.nil?它不起作用,即使看起来应该如此:

 > a 
 => #<Post id: 1, title: "Fire at Bible College in Christian", photo: nil, body: "A massive fire is now raging at the Bible College ...", created_at: "2014-08-28 08:06:19", updated_at: "2014-09-18 23:35:04", user_id: 1, ancestry: nil, file: nil, status: nil, slug: "fire-at-bible-college-in-christian", publication_status: 1, has_eyewitness: true> 

请注意,上面的:photo属性设置为nil ...但是当我这样做时:

 > a.photo
 => #<PhotoUploader:0x00000102e19878 @model=#<Post id: 1, title: "Fire at Bible College in Christian", photo: nil, body: "A massive fire is now raging at the Bible College ...", created_at: "2014-08-28 08:06:19", updated_at: "2014-09-18 23:35:04", user_id: 1, ancestry: nil, file: nil, status: nil, slug: "fire-at-bible-college-in-christian", publication_status: 1, has_eyewitness: true>, @mounted_as=:photo> 
 > a.photo.nil?
 => false 

它不起作用。

我是否可以使用Carrierwave方法执行此操作或其他方式?

1 个答案:

答案 0 :(得分:3)

无需使用photo方法检查nil?属性。您可以直接检查a.photo?,它会根据文件是否存在返回布尔值。