ActiveRecord :: RecordNotFound в PostsController # показать, щелкнув ссылку - PullRequest
1 голос
/ 14 декабря 2011
<li><%= link_to('More Commented', posts_morecommented_path) %></li>

Error

ActiveRecord::RecordNotFound in PostsController#show

Couldn't find Post with id=morecommented

Request

Parameters:

{"id"=>"morecommented"}

Где я делаю ошибку?

postscontroller # show action

def show      @post = Post.find(params[:id])      ...         end

morecommented.html.erb

<% @moreCommented.each do |t| %>
    <%= link_to t.title, :controller => '/posts', :action => 'show', :id => t.id %><br/>
<% end %>

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

post GET    /posts/:id(.:format)           {:action=>"show", :controller=>"posts"}
....      
posts_morecommented        /posts/morecommented(.:format) {:controller=>"posts", :action=>"morecommented"}

routes.rb:

  resources :posts
  match "posts/:id/categ" => "posts#categ"
  match "posts/:id/tag_posts" => "posts#tag_posts"
  match "posts/searcharchive" => "posts#searcharchive"
  match "posts/morecommented" => "posts#morecommented"

Ответы [ 2 ]

5 голосов
/ 14 декабря 2011

переместить совпадение до вызова ресурсов

match "posts/morecommented" => "posts#morecommented"
resources :posts

В качестве альтернативы вы можете сделать

resources :posts do
   get :morecommented, on: :collection
end
2 голосов
/ 14 декабря 2011

Ваша проблема находится внутри вашего routes.rb файла, поскольку маршруты совпадают с действием сверху вниз. posts/morecommented соответствует posts/:id действию с params[:id], равным morecommented. Одним из решений, упомянутое Джерри, является изменение порядка ипереместите match "posts/morecommented" => "posts#morecommented" до вызова resources :posts в вашем файле routes.rb, другой - для установки требований на :id в вашем маршруте posts/:id.

...