Ruby on rails 我可以通过Rails迁移为对象的图片字段设置默认图片吗?

Ruby on rails 我可以通过Rails迁移为对象的图片字段设置默认图片吗?,ruby-on-rails,ruby,imagemagick,Ruby On Rails,Ruby,Imagemagick,我有一个car对象,当前没有默认图片,当没有用户上传的图片时会导致问题。我想制作一张默认图片,不知道这是否可行: class AddPictureToCars < ActiveRecord::Migration def change add_column :cars, :picture, :string, default: assets/images/default.jpg end end 默认部分是我将要添加的,不确定迁移中的路径是否正确 或者,如果我需要进入Image

我有一个car对象,当前没有默认图片,当没有用户上传的图片时会导致问题。我想制作一张默认图片,不知道这是否可行:

class AddPictureToCars < ActiveRecord::Migration
  def change
    add_column :cars, :picture, :string, default: assets/images/default.jpg
  end
end
默认部分是我将要添加的,不确定迁移中的路径是否正确

或者,如果我需要进入ImageMagick并编辑Carrierwave之前所说的回形针设置,以使其更加健壮。我该怎么办

编辑 Car.rb

使用默认url建议编辑picture\u uploader.rb

class PictureUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  process resize_to_limit: [380, 240]

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Add a white list of extensions which are allowed to be uploaded.
  def extension_white_list
    %w(jpg jpeg gif png)
  end

  def default_url(*args)
    ActionController::Base.helpers.asset_path("/images/default.jpg")
  end
end

默认图片位于assets/images/Default.jpeg

我会避免在数据库中存储回退图像路径,因为这会使以后更改默认图片变得更加困难

回形针允许默认的回退图像。只需将类似default\u url:/images/default.jpg的内容添加到has\u attached\u文件配置中

见:

如果使用CarrierWave,只需将默认的url方法添加到上载程序:

class PictureUploader < CarrierWave::Uploader::Base
  def default_url(*args)
    "/images/default.jpg"
  end
end

我没有附加的文件配置。我在上面添加了我的车型,我相信它会出现,图片配置是mount_uploader:picture,PictureUploader。我可以只添加一个带有默认图像的has_attached_文件行,还是可以通过PictureUploader进行添加?@virgeasault:我更新了我的答案。好像你用的是卡里瓦夫而不是回形针。是的,卡里瓦夫是我的错。我添加了默认的_url方法编辑问题来包含它,并运行了rake assets:precompile,但是默认情况下图像仍然没有显示出来。关于进一步的步骤有什么想法吗?@Virgeasault:我更新了我的答案,以解决您在资产管道方面的问题。用您建议的行替换该行不起作用,请将其添加到上面。页面或服务器输出上没有错误。创建对象时,服务器根本不显示图片,因为当用户未添加图片时,它不是参数,因此我不确定如何解决此问题。
class PictureUploader < CarrierWave::Uploader::Base
  def default_url(*args)
    "/images/default.jpg"
  end
end
    ActionController::Base.helpers.asset_path("/images/default.jpg")