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 endend
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])就可以正常工作.
我确信有一些显而易见的东西我不见了.任何建议将不胜感激!
解决方法@H_301_42@ 您可以通过将carrIErwave.rb初始化程序文件中的 – ur_net_format验证设置为false来修复错误.像这样:
ruby config.valIDate_unique_filename = true config.valIDate_filename_format = true config.valIDate_remote_net_url_format = true
希望这有助于任何人.
总结以上是内存溢出为你收集整理的ruby-on-rails – 在ActiveRecord Create上验证Carrierwave文件失败全部内容,希望文章能够帮你解决ruby-on-rails – 在ActiveRecord Create上验证Carrierwave文件失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)