ruby-on-rails - Carrierwave 和 has_many

标签 ruby-on-rails many-to-many carrierwave

我有这样的产品模型:

class Product < ActiveRecord::Base
 has_many :images, :class_name => 'ProductImage', :order => 'position DESC', :dependent => :destroy

def image_thumb
    images.first.image.thumb.url
  end

  def image
    images.first.image.url
  end
end

产品图片模型:

class ProductImage < ActiveRecord::Base
  attr_accessible :image, :position, :product_id, :title

  belongs_to :product

  default_scope order('position ASC')

  mount_uploader :image, ProductImageUploader
end

uploader 模型:

class ProductImageUploader < CarrierWave::Uploader::Base
...
 def default_url
  asset_path([version_name, "default.jpg"].compact.join('_'))
 end
end

但是如果我不为产品上传任何图片,我将在 image_thumb 和 image 方法中得到“nil”。如果没有上传一张图片并且Product和ProductImage模型之间的关系是一对多,如何获取default_url?

最佳答案

如果您没有访问 uploader 的权限, uploader 就无法帮助您,因此您必须手动完成。您已经在使用演示者(或多或少),所以这非常简单:

def image_thumb
  if images.any?
    images.first.image.thumb.url
  else
    asset_path("default.jpg")
  end
end

def image
  if images.any?
    images.first.image.url
  else
    asset_path("thumb_default.jpg")
  end
end

类似的代码适用于 belongs_to 关系。

关于ruby-on-rails - Carrierwave 和 has_many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996966/

相关文章:

ruby-on-rails - PG::ConnectionBad: FATAL: 用户 "alphauser"的密码验证失败

javascript - 为什么同步 SQL 是 "bad"?

mysql - 具有二进制信息的多行多列DB表的设计

ruby-on-rails - 如何将图像链接到(可点击)页面

ruby-on-rails - rails : sporadic Carrierwave/Excon errors

ruby-on-rails - 带有 Twitter Bootstrap for Rails 表单标签的复选框

ruby-on-rails - session 是 Rails 中的方法还是哈希?有点迷糊

mysql - 如何在多对多关系上进行 MySQL CRUD 选择

symfony - Sonata Admin 编辑表单多对多不起作用 - symfony2.1.6

mysql - Rails 4 Carrierwave 和 mysql 无法将 nil 转换为 String