Нет ошибки метода в приложении rails 3 - PullRequest
5 голосов
/ 23 сентября 2010

Я получаю эту ошибку:

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

Мои маршруты:

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

В замешательстве, поскольку я не вижу ссылок на post_comments_path ??

Рейк-маршруты:

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"}

Ответы [ 2 ]

10 голосов
/ 23 сентября 2010

У вас не указан путь post_comments_path в ваших маршрутах.Вы не должны использовать :has_many в маршрутах (только модели), но вместо этого вкладывайте их в гнездо.Это должно сделать трюк:

resources :posts do
  resources :comments
end
3 голосов
/ 23 сентября 2010

Я думаю, что проблема в ваших маршрутах.

resources :posts, :has_many => :comments

В этом блоге они немного изменили маршруты: http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

В Rails 2, вложенныересурсы были определены блоком или с помощью ключа: has_many или: has_one.Оба из них были заменены блоком, что дает им более рубиновый интерфейс для определения связанных ресурсов.

Попробуйте это:

resources :posts do
  resources :comments
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...