2013-03-08 24 views
6

Ho ricevuto il seguente errore nella mia app Rails quando provo ad accedere a una pagina che contiene un modulo per creare un post. Sto cercando di implementare una funzionalità simile alla funzione di micropost di Michael Hartl nella sua applicazione di esempio:metodo non definito _path (NoMethodError)

NoMethodError in Home#index 
undefined method `posts_path' for #<#<Class:0xb5c70744>:0xb60013b8> 

Ecco la pagina vista indice che contiene il codice per inserire il modulo:

<%= render 'shared/post_form' if user_signed_in? %> 

_post_form.html .erb:

<%= form_for(@post) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
    <%= f.text_area :content, placeholder: "Provide your network with a status update..." %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

Ecco il controllore casa:

class HomeController < ApplicationController 

    before_filter :authenticate_user! 

    def index 
    #render :text => "Welcome #{current_user.email}!" 
    @users = User.all 
    @post = current_user.posts.build if signed_in? 
    end 
end 

Posso davvero usare qualche aiuto nella revisione del codice. Lo sto fissando e ho bisogno che qualcun altro lo recensisca per me. Sono nuovo di Rails quindi per favore perdonami se non fornissi le informazioni necessarie.

Ulteriori informazioni: sto utilizzando la gemma Devise per gestire l'autenticazione dell'utente.

Grazie!

MODIFICA: ho aggiunto il controller sbagliato.

EDIT 2:

di file routes.rb:

AppName::Application.routes.draw do 

    #get "users/index" 

    #get "users/show" 



authenticated :user do 
    root :to => 'home#index' 
    end 
    root :to => "home#index" 
    devise_for :users 
    resources :users do 
    member do 
     get :following, :followers, :posts 
    end 
    end 
    resources :works 
    resources :relationships, only: [:create, :destroy] 
end 

EDIT 3: percorsi Rake

root  /       home#index 
        root  /       home#index 
     new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  devise/registrations#cancel 
     user_registration POST /users(.:format)    devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 
      following_user GET /users/:id/following(.:format) users#following 
      followers_user GET /users/:id/followers(.:format) users#followers 
       posts_user GET /users/:id/posts(.:format)  users#posts 
        users GET /users(.:format)    users#index 
         POST /users(.:format)    users#create 
       new_user GET /users/new(.:format)   users#new 
       edit_user GET /users/:id/edit(.:format)  users#edit 
        user GET /users/:id(.:format)   users#show 
         PUT /users/:id(.:format)   users#update 
         DELETE /users/:id(.:format)   users#destroy 
        works GET /works(.:format)    works#index 
         POST /works(.:format)    works#create 
       new_work GET /works/new(.:format)   works#new 
       edit_work GET /works/:id/edit(.:format)  works#edit 
        work GET /works/:id(.:format)   works#show 
         PUT /works/:id(.:format)   works#update 
         DELETE /works/:id(.:format)   works#destroy 
      relationships POST /relationships(.:format)  relationships#create 
      relationship DELETE /relationships/:id(.:format) relationships#destroy 
+0

'<% = form_for (@post) do | f | %> 'cambia in' <% = form_for (Post.new) do | f | %> ' – codeit

+0

L'ultimo commento non risolve il problema di root. Invece di collegare completamente l'uso di Rails di REST HTTP, crea un oggetto Post per quel modulo. Questo diventa un problema quando si utilizza questo modulo per modificare un oggetto già creato memorizzato in @post. Per arrivare alla radice del problema, puoi pubblicare il tuo file routes.rb? – westonplatter

+1

Siamo spiacenti, '<% = form_for Post.new,: url => {: action =>: create,: controller =>: posts} do | f | %> 'questo dovrebbe funzionare. – codeit

risposta

18

È necessario aggiungere resources :posts nel file routes.rb in modo che Rails automaticamente crea l'helper posts_path per te.

L'aggiunta di resources :posts genererà i percorsi REST corretti per creare, eliminare, aggiornare e recuperare posts. Dai un'occhiata alla guida di Ruby on Rails per il routing, in particolare this section here sul routing e sulle rotte RESTful.

+0

Ciao Zajn, grazie mille per la risposta. Questo ha funzionato. Non ho pensato di aggiungere le risorse: post perché il tutorial di Michael Hartl sembrava lasciarlo fuori (non capisco perché). Avrei dovuto provare comunque! Il tuo aiuto, e tutti gli altri che hanno risposto, è molto apprezzato! – winston

Problemi correlati