Ruby on rails 当文件未上载时,如何防止carrierwave将文件名字符串添加到已装载列?
我正在使用Rails和ActiveRecord。 我已将carrierwave安装在型号(Ruby on rails 当文件未上载时,如何防止carrierwave将文件名字符串添加到已装载列?,ruby-on-rails,activerecord,carrierwave,Ruby On Rails,Activerecord,Carrierwave,我正在使用Rails和ActiveRecord。 我已将carrierwave安装在型号(列表)的一列(:徽标)上。我的默认文件名是“disp\u logo”。假设我只做Listing.create在这种情况下,我没有真正上传任何文件。我没有做Listing.logo=或Listing.remote\u logo\u url=。但是,carrierwave仍然在:logo列中插入字符串“disp_logo”。为什么会这样?如何防止carrierwave这样做 我的uploader类具有以下方法:
列表
)的一列(:徽标
)上。我的默认文件名是“disp\u logo”
。假设我只做Listing.create代码>在这种情况下,我没有真正上传任何文件。我没有做Listing.logo=
或Listing.remote\u logo\u url=
。但是,carrierwave仍然在:logo
列中插入字符串“disp_logo”
。为什么会这样?如何防止carrierwave这样做
我的uploader类具有以下方法:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def filename
"disp_logo"
end
这就是我所说的默认文件名。
如果未上传图像,我希望列:logo
具有NULL
。相反,它有“disp_logo”
似乎是您创建迁移时将“disp_logo”作为列的默认值。您应该改为在上载程序中设置默认图像,如下所示:
# Provide a default URL as a default if there hasn't been a file uploaded:
def default_url
"/" + [version_name, "disp_logo.jpg"].compact.join('_')
end
或者,如果您使用rails 3.1和资产管道:
# Include the Sprokets helpers for Rails 3.1+ asset pipeline compatibility:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
# Provide a default URL as a default if there hasn't been a file uploaded:
def default_url
asset_path [version_name, "disp_logo.jpg"].compact.join('_')
end
编辑:
修改文件名
方法如下:
def filename
"something.jpg" unless original_filename.nil?
end
您创建迁移时似乎将“disp_logo”作为列的默认值。您应该改为在上载程序中设置默认图像,如下所示:
# Provide a default URL as a default if there hasn't been a file uploaded:
def default_url
"/" + [version_name, "disp_logo.jpg"].compact.join('_')
end
或者,如果您使用rails 3.1和资产管道:
# Include the Sprokets helpers for Rails 3.1+ asset pipeline compatibility:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
# Provide a default URL as a default if there hasn't been a file uploaded:
def default_url
asset_path [version_name, "disp_logo.jpg"].compact.join('_')
end
编辑:
修改文件名
方法如下:
def filename
"something.jpg" unless original_filename.nil?
end
我想出了一个更适合我的用例的解决方案。
class LogoUploader < CarrierWave::Uploader::Base
attr_accessor :upload_failed
def filename
upload_failed ? "failed" : "disp_logo"
end
end
class SomeModel < ActiveRecord::Base
mount_uploader :logo, LogoUploader
def some_method_that_assigns_a_file_and_uploads_it
self.remote_logo_url = <some_url>
OR
self.logo = <some file>
<some_other_logic>
save!
rescue
logo.upload_failed = true
save!
end
end
类LogoUploader
通过这种方式,我知道哪些记录已被处理
:logo#=>“disp#u logo”
,哪些记录失败:logo#=>“失败”
,哪些记录尚未被处理:logo#=>nil
我想出了一个更适合我的用例的解决方案。class LogoUploader < CarrierWave::Uploader::Base
attr_accessor :upload_failed
def filename
upload_failed ? "failed" : "disp_logo"
end
end
class SomeModel < ActiveRecord::Base
mount_uploader :logo, LogoUploader
def some_method_that_assigns_a_file_and_uploads_it
self.remote_logo_url = <some_url>
OR
self.logo = <some file>
<some_other_logic>
save!
rescue
logo.upload_failed = true
save!
end
end
类LogoUploader通过这种方式,我知道哪些记录已被处理
:logo#=>“disp#u logo”
,哪些记录失败:logo#=>“失败”
,哪些记录尚未被处理:logo#=>nil
,谢谢!但我不是这个意思。我已经编辑了我的问题。谢谢!但我不是这个意思。我已经编辑了我的问题。