我在使用自己的路由实现列表操作时遇到问题。这就是我所拥有的 (只是重要的部分) 的routes.rb
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
我收到此错误 PostsController中的ActiveRecord :: RecordNotFound#show
无法找到ID = sort的帖子。
我认为这是因为应用程序认为当我输入http://localhost:3000/posts/sort时我想显示带有id = sort.how的元素我能解决这个问题吗? 提前谢谢你
答案 0 :(得分:1)
确实,您处于REST环境中。使用:get方法访问帖子时,默认路由会将请求发送到show操作,并将:id param设置为sort。尝试在路线中定义排序操作,例如:
map.resources :posts, :collection => {:sort => :get}
根据您的需要设置动词:由于您只是检索数据,因此看似正确。
然后,删除行
map.sort "sort" , :controller => "posts" , :action => "sort"
您现在应该还有一个不错的网址:sort_posts_url