ruby-on-rails – 在ActiveRecord Create上验证Carrierwave文件
发布时间:2020-12-17 02:03:38 所属栏目:百科 来源:网络整理
导读:所以我有一个非常直接的Carrierwave实现图像上传.我已经在ActiveRecord模型上安装了上传器: class MenuItem ActiveRecord::Base attr_accessible :description,:menu_id,:name,:active,:photo mount_uploader :photo,PhotoUploader belongs_to :menu before
所以我有一个非常直接的Carrierwave实现图像上传.我已经在ActiveRecord模型上安装了上传器:
class MenuItem < ActiveRecord::Base attr_accessible :description,:menu_id,:name,:active,:photo mount_uploader :photo,PhotoUploader belongs_to :menu before_save :default_values validates :name,presence: true validates :menu_id,presence: true validates :description,length: { maximum: 250 } private def default_values if (self.active.nil?) self.active = true end end end 我正在使用的表单结合编辑/创建上面的MenuItem以及附加文件: <%= form_for(@menuitem) do |f| %> <%= render 'shared/error_messages',object: @menuitem %> <%= f.file_field :photo,:id => "photo" %> <%= f.label :name %> <%= f.text_field :name %> <%= f.label :description %> <%= f.text_area :description %> <%= f.label :active %> <%= f.check_box :active,:value => @menuitem.active %> <%= f.submit "Save Menu Item",class: "btn btn-large btn-primary" %> <%= f.submit "Cancel",class: "btn btn-large btn-secondary" %> <% end %> 在编辑/更新的情况下,一切正常. 但是,在New / Create上我收到了一个验证错误:photo属性只是说“Photo is Invalid”.上传者定义是vanilla: class PhotoUploader < CarrierWave::Uploader::Base include CarrierWaveDirect::Uploader after :store,:make_thumbnail storage :fog def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def make_thumbnail(file) a = filename.split('/') key = store_dir + "/" + a[0] + "/" + model.id.to_s + "_thumb.jpg" job = Blitline::Job.new(url) job.application_id = ENV['BLITLINE_APPLICATION_ID'] sf = job.add_function("resize_to_fill",{:height => 100,:width => 100}) sf.add_save("thumbnail",key,ENV['S3_BUCKET']) bs = Blitline.new bs.jobs << job res = bs.post_jobs end end Controller方法也很简单 class MenuItemsController < ApplicationController def new @menuitem = MenuItem.new @menuitem.menu_id = params[:menuid] @menuitem.active = true end def create @menuitem = MenuItem.new(params[:menu_item]) if @menuitem.save flash[:success] = "Menu Item created!" redirect_to menu_path(@menuitem.menu) else render 'new' end end 我想也许问题可能与上传者的store_dir方法中对model.id的引用有关,而且由于尚未创建记录,因此ID无法使用 – 但删除它并没有帮助解决问题. 同样,使用相同表单的编辑/更新路径只需调用menuitem.update_attributes(params [:menu_item])就可以正常工作. 我确信有一些显而易见的东西我不见了.任何建议将不胜感激! 解决方法
您可以通过将carrierwave.rb初始化程序文件中的 – ur_net_format验证设置为false来修复错误.
像这样: ruby config.validate_unique_filename = true config.validate_filename_format = true config.validate_remote_net_url_format = true 希望这有助于任何人. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |