我有一个简单的文件上传表单,用户应该能够从他们的机器上选择一个csv文件,然后将其保存到文件夹中。我正在尝试使用Carrierwave,我的应用程序是使用Ruby on Rails构建的。使用Carrierwave上传文件时没有路由匹配错误
当我试图保存文件时,我得到错误“无路由匹配[POST] “/客户/新”。
这里有各种组件。
/new.html。 ERB
<%= form_for :dataload, :html => {:multipart => true} do |f| %>
<p>
<%= f.file_field :file %>
</p>
<p><%= f.submit %></p>
<% end %>
/models/dataload.rb
class Dataload < ActiveRecord::Base
attr_accessible :file_name, :request_user, :source
mount_uploader :file, CustomerWarrantyUploader
end
* /上传/ customer_warranty_uploader.rb *
class CustomerWarrantyUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extension_white_list
%w(csv)
end
* customers_controller.rb(新方法;我什么也没有做这个)*
def new
@customer = Customer.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @customer }
end
end
以下是当前的路线,为客户
resources :customers
我不知道是什么问题,已经尝试了各种类似的做法。任何建议表示赞赏。
太好了。没有更多的错误,我收到消息说客户已成功创建。但是,该文件不会保存在customer_warranty_uploader.rb中指定的位置。我错过了什么关于carrierwave? – analyticsPierce
在控制器中,它看起来并不像你在做任何事情。你最有可能需要做类似下面的事情(以及任何其他所需的逻辑): @dataload = Dataload.create(params [:dataload]) –
此外(我几乎在我原来的帖子中有这个,但删除它),您可能希望重新考虑一下您的实施。可能更希望为Dataload对象专门制作一个新的控制器,因为似乎可能会有更明显的问题分离。如果不添加客户逻辑,修复可能会更容易维护和排除故障。在这里,我假设页面上有(至少)两种形式。 –