【问题标题】:default pic when using multiple nested images on paperclip在回形针上使用多个嵌套图像时的默认图片
【发布时间】:2012-05-10 04:09:12
【问题描述】:

我正在使用 Paperclip 上传多个商品图片。我遵循了本教程的一些内容http://sleekd.com/general/adding-multiple-images-to-a-rails-model-with-paperclip/ 我的模型是:

项目.rb

has_many :item_images, :dependent => :destroy
accepts_nested_attributes_for :item_images, :reject_if => lambda { |l| l['item_image'].nil? }

ItemImage.rb

class ItemImage < ActiveRecord::Base
 belongs_to :item
 belongs_to :user
 #for image. Paperclip     following Bootstrap sizes.
 has_attached_file :image,
                :styles => { :large => ["330x230>",:png], :medium => ["210x150>",:png], :small => ["90x90>",:png], :thumb => ["32x32>", :png] },
                :default_url => '/images/missing_image_:style.png',
                :storage => :s3,
                :bucket => 'iscomp',
                :s3_credentials => "#{RAILS_ROOT}/config/amazon_s3.yml",
                :path => "iscomp/:attachment/:style/:id.:extension"
 validates_attachment_presence :image
 validates_attachment_size :image, :less_than => 5.megabytes
end 

我的问题是,由于图像存储在第二个模型上,当@item.item_image 上没有图像/记录时,我无法访问默认的空白图像。如果我直接在@item 上使用了回形针,回形针将为我返回默认图像。

如果我不想在每次调用缩略图时继续添加 if/unless 语句,那么最好的方法是什么?

【问题讨论】:

    标签: ruby-on-rails paperclip nested-sets


    【解决方案1】:

    您可以通过以下方式解决此问题:

    在迁移中添加 itemimage_count

      def self.up  
       add_column :item, :itemimage_count, :integer, :default => 0
    
     Item.reset_column_information  
       Item.all.each do |item|  
         item.update_attribute :itemimage_count, item.itemimages.length  
       end  
     end  
    
     def self.down  
       remove_column :item, :itemimage_count  
     end
    end
    

    然后,这会将许多 ItemImages 与每个 Item 相关联。您可以在视图、控制器和模型中访问此计数器。

    如果你想变得漂亮,你可以简单地在你的模型中设置一个范围条件。

    项目.rb

    scope :list, :conditions => ["itemimages_count >= 0"]
    

    物品控制器

    @itemimages = Item.list
    

    我会亲自使用一组 if else 语句在您的视图中制作一个部分,只要您想显示图像,只需调用部分。

    if Item.itemimages_count == 0
        #show this image
    end
     #code that displays an Item's image
        #show the image in itemimages
    

    我希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      我不知道您是否正在寻找一种优雅的方式来执行此操作,但我所做的方式是创建默认图像,如果 @item.item_image 返回空白,我将显示默认的空白图像。我没有使用默认的回形针。

      【讨论】:

      • 嗯,这是一种方式。我会尝试并继续看看是否有更好的选择
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多