2011-12-31 2 views
0

я создавал scaffolded класс по рельсам, а затем я попытался получить доступ к его «новое» действие, но я получил эту ошибку:не определен метод по рельсам 3 scaffolded «новое» действие

NoMethodError in Medias#new 

Showing /Users/webcloud/Documents/Trabalhos/Reinaldo/Residencial/gerenciador/rails_estate/app/views/medias/_form.html.erb where line #1 raised: 

undefined method `media_index_path' for #<#<Class:0x007fbfdc371bf0>:0x007fbfdc36b6d8> 
Extracted source (around line #1): 

1: <%= form_for @media, :html => {:multipart => true} do |f| %> 
2: <% if @media.errors.any? %> 
3:  <div id="error_explanation"> 
4:  <h2><%= pluralize(@media.errors.count, "error") %> prohibited this media from being saved:</h2> 
Trace of template inclusion: app/views/medias/new.html.erb 

Rails.root: /Users/webcloud/Documents/Trabalhos/Reinaldo/Residencial/gerenciador/rails_estate 

Application Trace | Framework Trace | Full Trace 
app/views/medias/_form.html.erb:1:in `_app_views_medias__form_html_erb___3954857503624418674_70230991238020' 
app/views/medias/new.html.erb:3:in `_app_views_medias_new_html_erb__3813674121976191732_70231004981260' 
app/controllers/medias_controller.rb:34:in `new' 

странная часть является то, что он есть ресурс конфигурация:

resources :medias 

И это модель использует carrierwave камень для управления загрузкой

class Media < ActiveRecord::Base 
    has_many :gallery_data 
    has_many :galleries, :through => :gallery_data 
    belongs_to :user 
    belongs_to :category 
    attr_accessible :file_name, :remote_image_url 
    mount_uploader :file_name, ImageUploader 
end 

Это метод контроллера (новый) будет точно такой же, как и любой метод scaffolded:

# GET /media/new 
    # GET /media/new.json 
    def new 
    @media = Media.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @media } 
    end 
    end 

Я действительно не знаю, что здесь происходит.

ответ

0

См. this answer для вашего решения.

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

$ rails console 
> 'media'.pluralize 
=> "media" 

Вам нужно изменить routes.rb (и, возможно, некоторые другие символы, такие как имена классов контроллеров) для того, чтобы исправить эту проблему.

+0

Это одна из причин, я никогда не одобрял соглашение Rails об использовании множественных чисел для имен таблиц и имен контроллеров. Я думаю, что это возможно изменить, но, конечно, когда в Railsville лучше делать то, что делают Railsvilleites, даже в тех случаях, когда они оказались «неправильными».

+0

«Контракт над конфигурацией» - это позиция, которую я считаю. Мне это нравится, это имеет смысл для меня, и мне никогда не приходилось бороться с этим. Во всем остальном приятно иметь последовательность. (Кроме того, «медиа» - это не слово. Медиа * - это свое собственное множественное число, поэтому эта конкретная проблема не должна возникать слишком часто.) – Alex

+0

, когда я меняю маршрут на: media, он переводит его неправильно: new_medium GET/media/new (.: format) –

Смежные вопросы