【问题标题】:CarrierWave default_url not triggeringCarrierWave default_url 未触发
【发布时间】:2013-03-06 05:08:22
【问题描述】:

我很难让它发挥作用。现在我在我的视图页面上使用 image_tag 助手。如果没有加载图像,我需要它使用 Carrierwave 的后备,而不是仅仅抛出错误。

对于我的设置,我使用雾进行存储,我觉得这可能是问题的一部分。

def default_url
  asset_path("fallback/default.jpg")
end

Carrierwave 是否只找到任何未设置的图像?或者是否有一些特殊的方式我应该获取图像 url 以使其工作?这就是我现在所拥有的。

<%= image_tag(property.assets.first!.image_url, :width => "200") %>

资产.rb

require 'file_size_validator'
class Asset < ActiveRecord::Base
  validates :image_url, uniqueness: true
  validates :image_url, allow_blank: true, format: {
      with: %r{\.(gif|jpg|png)$}i,
      message: 'must be a URL for GIF, JPG or PNG image.'
  },
            :file_size => {
                :maximum => 0.5.megabytes.to_i
            }

  attr_accessible :image_url, :property_id
  belongs_to :property
  mount_uploader :image_url, ImageUploader

end

Property.rb

  validates :street_address, :city, :state, :description, :price, :deposit, :beds, :baths, :presence => true
  validates :street_address, :uniqueness => true
  validates :price, :deposit, numericality: {greater_than_or_equal_to: 0.01}

  has_many :assets, :dependent => :destroy

  attr_accessible :street_address, :street_address2, :city, :state, :zip, :country, :description, :price, :beds, :baths,
                  :deposit, :availability, :leased, :sqft, :pets
  attr_accessible :assets_attributes
  accepts_nested_attributes_for :assets, :reject_if => lambda { |p| p[:image_url].blank? }, :allow_destroy => true

【问题讨论】:

  • 您看到了什么错误?您能否确认您访问了后备图像(将 localhost:3000/assets/fallback.default.jpg 放入浏览器)
  • 我收到无记录错误,因为 image_tag 正在寻找数据库中没有的图像 url。在浏览器窗口中输入图像的路由只会给我一个路由错误。
  • 如果您看到无记录错误,这意味着您的财产中没有任何资产。要使 default_url 起作用,您需要创建一个没有图像的资产。顺便说一句,我上面的资产拼写错误,所以你应该尝试 'localhost:3000/assets/fallback.default.jpg'
  • 那么让我看看我是否理解这一点。没有图像时它不使用默认网址,它只是在有网址但没有图像匹配它时默认?我在 URL 中尝试了一些不同的 url 变体,但仍然一无所获
  • 我不确定我们是否在同一页面上,但我会尝试进一步解释一下。假设您有一个电子邮件模型。该模型有一个附件,这是电子邮件的众多属性之一。假设您将上传程序安装在附件上。如果您创建没有附件(未上传)的电子邮件记录,则 Email.first.attachment_url 将为您提供 default_url。如果您一开始没有电子邮件,则无法获取默认网址。在您的情况下,资产是电子邮件,图像是附件。也许如果您可以提供更多代码,您的问题会更清楚。

标签: ruby-on-rails-3 carrierwave


【解决方案1】:

试试&lt;%= image_tag(property.assets.first!.image_url.url, :width =&gt; "200") %&gt;

假设您在 Rails 控制台中,并且您有一个带有图像的资产。虽然Asset.first.image_url 看起来它返回的东西类似于 url(假设您使用的是远程存储),但它实际上不是一个字符串,它是一个上传器。 Asset.first.image_url.class 将返回 ImageUploader。要获取url,您需要添加调用上传者的url 方法。

【讨论】:

  • 这不起作用。还有其他想法吗? "200") %>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 2014-11-29
  • 2023-04-07
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多