我正在尝试使用Carrierwave在我的rails应用中实现基本上传表单。我有一个名为图像的模型,上传者名为 image_path ,我收到错误:
undefined method `images_path' for #<#<Class:0x0000010369ea20>:0x00000103765288>
我不确定为什么它认为它应该找到“images_path”而不是“image_path” - 我在我的应用程序中搜索“images_path”并没有找到任何内容。
这就是目前的一切:
html.erb:
<%= form_for Image.new do |f| %>
<%= f.error_messages %>
<%= f.hidden_field :spin_id %>
<p>
<%= f.file_field :image_path, multiple: true %>
<%= f.submit %>
</p>
<% end %>
image.rb
class Image < ActiveRecord::Base
belongs_to :spin
mount_uploader :image_path, ImagePathUploader
end
image_path_uploader.rb
class ImagePathUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
非常感谢任何帮助,因为我完全难过。
以下是完整错误:
ActionView::Template::Error (undefined method `images_path' for #<#<Class:0x00000104f36da8>:0x000001037e4ec0>):
40:
41: </div>
42: <%# add file input stuff here %>
43: <%= form_for Image.new, :html => {:multipart => true} do |f| %>
44: <%= f.error_messages %>
45: <%= f.hidden_field :spin_id %>
46: <p>
app/views/home/index.html.erb:43:in `block (2 levels) in _app_views_home_index_html_erb__3305799271767470298_2188818660'
app/views/home/index.html.erb:30:in `block in _app_views_home_index_html_erb__3305799271767470298_2188818660'
app/views/home/index.html.erb:26:in `_app_views_home_index_html_erb__3305799271767470298_2188818660'
Rendered /Users/[]/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.2ms)
Rendered /Users/[]/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.9ms)
Rendered /Users/[]/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (11.1ms)
答案 0 :(得分:2)
表单将发布到多个路径(在本例中为images_path)。这是来自Image.new(其中.new_record?是真的)。它是由多态路径方法引起的,如果你想进一步研究它。
这是预期和良好的。在您的路线中,您应该能够创建Image对象,例如:
resources :images
这将创建许多路线。
一个是对images_path网址的POST。这不应该干扰图像中的image_path方法,但是您使用了许多可能令人困惑的类似名称。
要查看您拥有的路由,请从命令行尝试rake routes
。