2010-09-17 7 views
0

J'ai un problème pour implémenter une action de liste avec son propre chemin. voici ce que j'ai (seulement des parties importantes) routes.rbrails routes confusion show show avec route nommée

map.resources :posts 
    map.login "login" ,:controller => "user_sessions" ,:action => "new" 
    map.logout "logout" , :controller => "user_sessions" , :action => "destroy" 
    map.sort "sort" , :controller => "posts" , :action => "sort" 

posts_controller.rb

class PostsController < ApplicationController 

def index 
    logger.info "index params:::"+params.inspect 
    @posts = current_user.posts.paginate :page => params[:page], :order => 'created_at DESC' 
    end 
end 

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

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


    def sort 
    logger.info "sort params:::"+params.inspect 
    @posts=current_user.posts.paginate(:page=>params[:page],:order=> params[:sort].to_s) 
    if request.xml_http_request? 
    render :update do |page| 
    page.replace_html :posts , :partial => 'post'  
    end 
    end 
end 


end 

Je reçois cette erreur ActiveRecord :: RecordNotFound à PostsController # show

Couldn Ne pas trouver Post avec ID = tri.

Je pense que c'est parce que l'application pense que lorsque je tape http://localhost:3000/posts/sort je veux montrer l'élément avec id = sort.Comment puis-je résoudre ce problème ?? merci d'avance

Répondre

1

En effet, vous êtes dans un contexte REST. Lors de l'accès aux messages avec la méthode: get, le routage par défaut envoie la requête à l'action show, avec le paramètre: id param à trier. Essayez de définir l'action de tri dans vos itinéraires, quelque chose comme:

map.resources :posts, :collection => {:sort => :get} 

Régler le verbe en fonction de vos besoins,: obtenir semble juste puisque vous êtes juste la récupération de données.

Ensuite, supprimez la ligne

map.sort "sort" , :controller => "posts" , :action => "sort" 

Vous devriez maintenant avoir aussi une belle url: sort_posts_url