2010-09-23 4 views
5

Ich erhalte diese Fehlermeldung:Keine Methode Fehler in Schienen 3 app

undefined method `post_comments_path' for #<#<Class:0x1052a6e98>:0x1052a4be8> 
Extracted source (around line #27): 

24: 
25: <% end%> 
26: 
27: <% form_for [@post, Comment.new] do |f| %> 
28: <p> 
29: 
30:  <%= f.label :name, "Author" %><br /> 

Meine Routen:

Myblog::Application.routes.draw do 

    root  :to => 'posts#index' 

    resources :comments 

    resources :posts, :has_many => :comments 

post.rb

class Post < ActiveRecord::Base 
    has_many :comments 
end 

comment.rb

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

views/posts/show.html.erb

<p id="notice"><%= notice %></p> 

<p> 
    <b>Title:</b> 
    <%= @post.title %> 
</p> 

<p> 
    <b>Body:</b> 
    <%= @post.body %> 
</p> 

<h2>Comments</h2> 

<% @post.comments.each do |c|%> 

    <p> 
     <b><%=h c.name %>said: </b> 
     <%= time_ago_in_words(c.created_at)%> ago  
    </p> 
    <p> 
     <%= c.body%> 
    </p> 

<% end%> 

<% form_for [@post, Comment.new] do |f| %> 
    <p> 

    <%= f.label :name, "Author" %><br /> 
    <%= f.text_field :name %><br /> 
    <%= f.label :body, "Comment Description" %><br /> 
    <%= f.text_area :body %> 
    </p> 

    <p> 
    <%= f.submit "Add Comment" %> 
    </p> 
<% end %> 


<%= link_to 'Edit', edit_post_path(@post) %> | 
<%= link_to 'Back', posts_path %> 

verwirrt wie ich post_comments_path nicht jede Bezugnahme sehen ??

Rake Routen:

root  /(.:format)     {:action=>"index", :controller=>"posts"} 
    comments GET /comments(.:format)   {:action=>"index", :controller=>"comments"} 
    comments POST /comments(.:format)   {:action=>"create", :controller=>"comments"} 
new_comment GET /comments/new(.:format)  {:action=>"new", :controller=>"comments"} 
edit_comment GET /comments/:id/edit(.:format) {:action=>"edit", :controller=>"comments"} 
    comment GET /comments/:id(.:format)  {:action=>"show", :controller=>"comments"} 
    comment PUT /comments/:id(.:format)  {:action=>"update", :controller=>"comments"} 
    comment DELETE /comments/:id(.:format)  {:action=>"destroy", :controller=>"comments"} 
     posts GET /posts(.:format)    {:action=>"index", :controller=>"posts"} 
     posts POST /posts(.:format)    {:action=>"create", :controller=>"posts"} 
    new_post GET /posts/new(.:format)   {:action=>"new", :controller=>"posts"} 
    edit_post GET /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"} 
     post GET /posts/:id(.:format)   {:action=>"show", :controller=>"posts"} 
     post PUT /posts/:id(.:format)   {:action=>"update", :controller=>"posts"} 
     post DELETE /posts/:id(.:format)   {:action=>"destroy", :controller=>"posts"} 
+0

Bitte führen Sie 'rake routes' und hängen Sie die Frage mit dem. – vonconrad

Antwort

10

Sie haben keine post_comments_path durch Ihre Routen festgelegt. Sie sollten :has_many nicht in Routen (nur Modelle) verwenden, sondern stattdessen verschachteln. Dies sollte den Trick tun:

resources :posts do 
    resources :comments 
end 
3

Ich denke, das Problem ist in Ihren Routen.

resources :posts, :has_many => :comments 

überprüfen Blog aus, änderten sie Strecken ziemlich viel: http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

In Rails 2, nested resources were defined by a block or by using a :has_many or :has_one key. Both of these have been superseded by a block, giving them a more Rubyish interface to defining associated resources.

Try this:

resources :posts do 
    resources :comments 
end