ruby-on-rails – 在ActiveRecord Create上验证Carrierwave文件失败

ruby-on-rails – 在ActiveRecord Create上验证Carrierwave文件失败,第1张

概述所以我有一个非常直接的Carrierwave实现图像上传.我已经在ActiveRecord模型上安装了上传器: class MenuItem < ActiveRecord::Base attr_accessible :description, :menu_id, :name, :active, :photo mount_uploader :photo, PhotoUploader 所以我有一个非常直接的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  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文件失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268484.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存