Rails链接到自定义操作无法正常工作

时间:2012-03-08 06:46:15

标签: ruby-on-rails link-to

我正在为saas课程完成作业2问题3。我完全是初学者,并且遇到问题。

作业要求您将列名称“电影片名”设为链接,按名称对电影进行排序

我正在做的是将“电影片名”作为链接:

%th#title_header= link_to 'Movie Title', :controller => 'movies', :action => 'sort_by_title'

向movies_controller添加自定义操作:

def sort_by_title
  @movies = Movie.find(:all, :order => "title")
  render movies_path
end

然后rails给我错误:

No route matches {:controller=>"movies", :action=>"sort_by_title"}

然后我说好,并将其添加到路径文件中:

match '/movies?sort_by_title', :to => 'movies#sort_by_title'

现在索引页面呈现正常,但单击movie_title链接时没有任何反应。

我是走在正确的道路上还是完全错了?

rake路线打印:

movies GET    /movies(.:format)               {:action=>"index", :controller=>"movies"}
       POST   /movies(.:format)               {:action=>"create", :controller=>"movies"}
new_movie GET    /movies/new(.:format)           {:action=>"new", :controller=>"movies"}
edit_movie GET    /movies/:id/edit(.:format)      {:action=>"edit", :controller=>"movies"}
movie GET    /movies/:id(.:format)           {:action=>"show", :controller=>"movies"}
       PUT    /movies/:id(.:format)           {:action=>"update", :controller=>"movies"}
       DELETE /movies/:id(.:format)           {:action=>"destroy", :controller=>"movies"}
              /movies?sort_by_title(.:format) {:controller=>"movies", :action=>"sort_by_title"}

谢谢

2 个答案:

答案 0 :(得分:2)

为什么在它真的只是一个GET参数时为它创建一个路由?它也不是一个新的动作,它仍然以不同的方式显示所有电影。

修改您的index操作以执行以下操作:

def index
  @movies = Movie.scoped
  @movies = @movies.order('title') if params['sort'] == 'title'
end

然后更新您的链接:

link_to 'Movie Title', movies_path(:sort => 'title')

坚持只做Movie.order(params['sort']) if params['sort']的诱惑,因为这会打开潜在的SQL注入,如果没有,只允许攻击者发现表中的所有列。如果用户只在URL中输入错误的排序值,它也有可能失败。

答案 1 :(得分:1)

它是否应该这样:

match '/movies/sort_by_title', :to => 'movies#sort_by_title'