скрепка и рельсы 3 - NoMethodError

Итак, я только что установил скрепку и пытаюсь заставить ее работать в моем новом приложении Rails.

Но это ошибка, которую я продолжаю получать, когда перехожу на localhost/upload/new:

NoMethodError in Upload#new
undefined method `uploads_path' for #<#<Class:0x00000102d1b8e0>:0x00000102cf24e0>
Extracted source (around line #3):

1: <h1>Upload Images</h1>
2: 
3: <%= form_for @upload, :html => { :multipart => true } do |f| %>
4:  <%= render 'fields', :f => f %>
5:  <div>
6:      <%= f.submit "Upload" %>

Я решил еще одну ошибку с помощью Paperclip, включив следующую строку в файл config/application.rb:

Paperclip::Railtie.insert 

Структура моего приложения заключается в том, что я создал модель под названием «загрузки», потому что приложение будет управлять различными типами файлов, загружаемыми пользователями. Скрепка управляет изображениями.

Контроллер загрузки выглядит так:

class UploadController < ApplicationController
  def index
  end

  def show
  end

  def new
    @upload = Upload.new
    @title = "Upload"
  end

  def edit
  end

  def delete
  end

end

Итак, моя модель загрузки выглядит так:

class Upload < ActiveRecord::Base
    attr_accessible :name, :description, :type

    has_attached_file :image
end

Вот как выглядит мой файл new.html.erb:

<h1>Upload Images</h1>

<%= form_for @upload, :html => { :multipart => true } do |f| %>
    <%= render 'fields', :f => f %>
    <div>
        <%= f.submit "Upload" %>
    </div>
<% end %>

Партиал выглядит так:

<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
</div>
<div class="field">
    <%= f.label :description %><br />
    <%= f.text_field :description %>
</div>
<div class="field">
    <%= f.label :type %><br />
    <%= f.text_field :type %>
</div>
<div class="field">
    <%= f.file_field :image %>
</div>

P.S. Я только изучаю Rails, поэтому, если есть ошибки новичка/нуба, пожалуйста, не распинайте меня :|

Спасибо.

Изменить: вот вывод маршрута rakes для приложения, как спросил Забба:

comment_index GET /comment/index(.:format)   {:controller=>"comment", :action=>"index"}
   comment_show GET /comment/show(.:format)    {:controller=>"comment", :action=>"show"}
    comment_new GET /comment/new(.:format)     {:controller=>"comment", :action=>"new"}
   comment_edit GET /comment/edit(.:format)    {:controller=>"comment", :action=>"edit"}
 comment_delete GET /comment/delete(.:format)  {:controller=>"comment", :action=>"delete"}
   upload_index GET /upload/index(.:format)    {:controller=>"upload", :action=>"index"}
    upload_show GET /upload/show(.:format)     {:controller=>"upload", :action=>"show"}
     upload_new GET /upload/new(.:format)      {:controller=>"upload", :action=>"new"}
    upload_edit GET /upload/edit(.:format)     {:controller=>"upload", :action=>"edit"}
  upload_delete GET /upload/delete(.:format)   {:controller=>"upload", :action=>"delete"}
  project_index GET /project/index(.:format)   {:controller=>"project", :action=>"index"}
   project_show GET /project/show(.:format)    {:controller=>"project", :action=>"show"}
    project_new GET /project/new(.:format)     {:controller=>"project", :action=>"new"}
   project_edit GET /project/edit(.:format)    {:controller=>"project", :action=>"edit"}
 project_delete GET /project/delete(.:format)  {:controller=>"project", :action=>"delete"}
   client_index GET /client/index(.:format)    {:controller=>"client", :action=>"index"}
    client_show GET /client/show(.:format)     {:controller=>"client", :action=>"show"}
     client_new GET /client/new(.:format)      {:controller=>"client", :action=>"new"}
    client_edit GET /client/edit(.:format)     {:controller=>"client", :action=>"edit"}
  client_delete GET /client/delete(.:format)   {:controller=>"client", :action=>"delete"}
 designer_index GET /designer/index(.:format)  {:controller=>"designer", :action=>"index"}
  designer_show GET /designer/show(.:format)   {:controller=>"designer", :action=>"show"}
   designer_new GET /designer/new(.:format)    {:controller=>"designer", :action=>"new"}
  designer_edit GET /designer/edit(.:format)   {:controller=>"designer", :action=>"edit"}
designer_delete GET /designer/delete(.:format) {:controller=>"designer", :action=>"delete"}
           root     /(.:format)                {:controller=>"project", :action=>"index"}

person marcamillion    schedule 06.11.2010    source источник
comment
Что выводит команда rake routes для вашего приложения? Есть ли в этом списке путь с именем uploads_path?   -  person Zabba    schedule 06.11.2010
comment
@Zabba, обновил пост выводом.   -  person marcamillion    schedule 06.11.2010
comment
uploads_path нет в опубликованном вами списке маршрутов. Вы должны иметь это. Итак, какая информация содержится в вашем routes.rb файле? Там есть что-то вроде map.resources :uploads?   -  person Zabba    schedule 06.11.2010
comment
Неа. Просто много 'get "designer/delete"' для всех ресурсов REST, контроллеров и моделей, перечисленных выше. Я попробую map.resources: загрузить и посмотреть, что произойдет.   -  person marcamillion    schedule 06.11.2010
comment
Также взгляните на отличные RailsCasts Райана Бейтса. Те, что относятся к маршрутизации: railscasts.com/tags/14   -  person Zabba    schedule 06.11.2010
comment
Когда я указал resources :uploads, это сработало. :) Спасибо чувак. Кстати, вы должны добавить это как ответ, и я отмечу его как правильный :)   -  person marcamillion    schedule 06.11.2010


Ответы (1)


В файл карты добавьте:

Для рельсов 2.x:

map.resources :uploads

Для рельсов 3.x:

resources :uploads

Это добавит все маршруты для 7 действий RESTful, и тогда users_path будет работать.

person Zabba    schedule 06.11.2010
comment
хотя синтаксис не на 100% точен. Я не думаю, что map.resources работает в rails 3. В моем случае это просто resources :uploads. - person marcamillion; 06.11.2010
comment
правильный. Обновил ответ. Я пропустил тот факт, что вы были на Rails 3. - person Zabba; 06.11.2010