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
'<% = form_for (@post) do | f | %> 'cambia in' <% = form_for (Post.new) do | f | %> ' – codeit
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
Siamo spiacenti, '<% = form_for Post.new,: url => {: action =>: create,: controller =>: posts} do | f | %> 'questo dovrebbe funzionare. – codeit