Rails 回形针默认图像仅在特定条件下
Rails paperclip default image only under certain conditions
我有一个 Lead 模型,它被产品和报价的 lead_status 参数分开。只有具有产品状态的线索才应该包含图片,而优惠则不应该。我已将附件 product_image table 迁移到架构并尝试仅为产品设置默认图像。像这样:
class Lead < ApplicationRecord
has_attached_file :product_image, styles: { small: "150x150>", default: "350x350"}
validates_attachment_content_type :product_image, content_type: /\Aimage\/.*\z/
before_save :product_image_default_url
def product_image_default_url
if self.lead_status == "product" && self.product_image.url.nil?
self.product_image.url = "/images/:style/default_user_avatar.png"
end
end
- 每次当我保存一个没有上传图片的新线索时,我都会默认得到“/product_images/original/missing.png”url。不管它是什么状态。
- 模型无法根据其状态识别新潜在客户
我该如何改变它?强制我的 Lead 模型根据 "product" 状态保存默认图像 url 并忽略所有具有 "offer" 状态的图像?
我的 rails 版本是 5.2.1 和 paperclip 6.0.0
尝试以下,
has_attached_file
:product_image,
styles: { small: "150x150>", default: "350x350"},
default_url: ":style/default_user_avatar.png"
# app/assets/images/medium/default_user_avatar.png
# app/assets/images/thumbs/default_user_avatar.png
现有方法是,
def default_url
if @attachment_options[:default_url].respond_to?(:call)
@attachment_options[:default_url].call(@attachment)
elsif @attachment_options[:default_url].is_a?(Symbol)
@attachment.instance.send(@attachment_options[:default_url])
else
@attachment_options[:default_url]
end
end
在初始化器中,为后续提供猴子补丁,
require 'uri'
require 'active_support/core_ext/module/delegation'
module Paperclip
class UrlGenerator
def default_url
if @attachment.instance.lead_status == 'product'
default_url = attachment_options[:default_url]
else
default_url = # provide another missing default_url
end
if default_url.respond_to?(:call)
default_url.call(@attachment)
elsif default_url.is_a?(Symbol)
@attachment.instance.send(default_url)
else
default_url
end
end
end
end
根据情况更新
我有一个 Lead 模型,它被产品和报价的 lead_status 参数分开。只有具有产品状态的线索才应该包含图片,而优惠则不应该。我已将附件 product_image table 迁移到架构并尝试仅为产品设置默认图像。像这样:
class Lead < ApplicationRecord
has_attached_file :product_image, styles: { small: "150x150>", default: "350x350"}
validates_attachment_content_type :product_image, content_type: /\Aimage\/.*\z/
before_save :product_image_default_url
def product_image_default_url
if self.lead_status == "product" && self.product_image.url.nil?
self.product_image.url = "/images/:style/default_user_avatar.png"
end
end
- 每次当我保存一个没有上传图片的新线索时,我都会默认得到“/product_images/original/missing.png”url。不管它是什么状态。
- 模型无法根据其状态识别新潜在客户
我该如何改变它?强制我的 Lead 模型根据 "product" 状态保存默认图像 url 并忽略所有具有 "offer" 状态的图像?
我的 rails 版本是 5.2.1 和 paperclip 6.0.0
尝试以下,
has_attached_file
:product_image,
styles: { small: "150x150>", default: "350x350"},
default_url: ":style/default_user_avatar.png"
# app/assets/images/medium/default_user_avatar.png
# app/assets/images/thumbs/default_user_avatar.png
现有方法是,
def default_url
if @attachment_options[:default_url].respond_to?(:call)
@attachment_options[:default_url].call(@attachment)
elsif @attachment_options[:default_url].is_a?(Symbol)
@attachment.instance.send(@attachment_options[:default_url])
else
@attachment_options[:default_url]
end
end
在初始化器中,为后续提供猴子补丁,
require 'uri'
require 'active_support/core_ext/module/delegation'
module Paperclip
class UrlGenerator
def default_url
if @attachment.instance.lead_status == 'product'
default_url = attachment_options[:default_url]
else
default_url = # provide another missing default_url
end
if default_url.respond_to?(:call)
default_url.call(@attachment)
elsif default_url.is_a?(Symbol)
@attachment.instance.send(default_url)
else
default_url
end
end
end
end
根据情况更新