2010-09-23 30 views
5

Dostaję taki błąd:Brak błędu metoda w szynach 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 /> 

Moi trasach:

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 %> 

Confused jak nie widzę wszelkie odniesienia do post_comments_path ??

trasy Zgrabiarka:

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

Proszę uruchomić 'natarcia routes' i dołączyć pytanie z tym. – vonconrad

Odpowiedz

10

Nie ma post_comments_path określony przez swoich tras. Nie powinieneś używać :has_many w trasach (tylko modele), ale zagnieżdż ich. To powinno wystarczyć:

resources :posts do 
    resources :comments 
end 
3

Myślę, że problem tkwi w twoich trasach.

resources :posts, :has_many => :comments 

Sprawdź ten blog, zmienili trasy sporo: 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.

Spróbuj tego:

resources :posts do 
    resources :comments 
end 
Powiązane problemy