Rails CarrierWave 上传的问题!

nuanshuidai · 2017年08月20日 · 最后由 nuanshuidai 回复于 2017年08月21日 · 1371 次阅读

利用 CarrierWave 上传一些图片,需要同时多张上传。这些图片和表字段无关,就单纯的传文件到服务器,看了 CarrierWave 的接口,类似这样:

controller 里:

def mystore
    up_file = params[:localfile]
    myfile = MyuploaderUploader.new
    myfile.store!(up_file)
end

试着写了个小 DEMO,代码如下:

view 里:

<%= form_for @cang_image do |f| %>
<%= f.label :名称: %>
<%= f.text_field :cang_image_name, class: 'form-control' %>
<%= f.label :图例 %>
<%= f.file_field :image ,class: 'form-control',multiple: true %>
<%#= f.hidden_field :image_cache %>
<%= f.submit yield(:button_text), class: "btn btn-primary" %>
<% end %>

controller 里的方法:

def create
       @image = cang_image_params["image"]
        myfile = CangImageUploader.new        
        myfile.store!(@image)
end 

运行时报这样的错:

有二个问题: 1:不知怎么解决。 2:store!(@image) 里的参数有啥具体要求不是很清楚。

有懂的同学指教下!谢谢!

model 需要 mount 吧,检查下看吧。

问题 1,请再仔细阅读 Getting Started(https://github.com/carrierwaveuploader/carrierwave#getting-started),检查每个步骤。

问题 2,从 源码可以看出store!方法的参数可以是 nil,也可以是 any kind of file object

chenge 回复

mount 是用在绑定到 model 上某个字段属性上才用的。我这里是不需要 model,只是单纯的将 params 里传过来的 image 内容利用 carrierwave 保存在指定的目录里而已啊!

qqerqqer 回复

利用健壮函数从 params 里取出 image,也就是传过来的文件,看出错是类型不匹配,可 carrierwave 官方文档里也是从 params 参数里取值啊!不太明白怎么拆解 params 参数了。

nuanshuidai 回复

下个断点,看看你的@test的内容什么

qqerqqer 回复

解决了: @image = cang_image_params["image"][0] 代码的最后加个 [0] 就 OK 了,应该还是对象匹配问题。

nuanshuidai 关闭了讨论 08月21日 09:02
nuanshuidai 重新开启了讨论 08月21日 09:02
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册