2012-03-08 40 views
1

我正在爲saas類創作任務2問題3。我完全是一名初學者,並且遇到問題。Rails鏈接到自定義操作失敗

分配要求你作列名「電影標題」的鏈接,其名字的電影排序

我在做什麼是使「電影標題」鏈接:

%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 

然後軌給我的錯誤:

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

然後我說OK,並把它添加到路由文件:

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

現在索引頁面呈現正常,但當點擊鏈接MOVIE_TITLE什麼也沒有發生。

我在正確的道路上還是完全錯誤的?

耙路線打印:

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

謝謝

+0

'rake routes'的輸出是什麼? – 2012-03-08 06:48:03

+0

在問題中添加。 – alexZ 2012-03-08 07:17:00

回答

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中輸入錯誤的排序值,它也有可能失敗。

+0

感謝您的答案!我嘗試使用@movies = Movie.find(:all,:order =>「title」)if params ['sort'] =='title',它起作用。我看到你對風險的評論,但@ movies.order給出了未定義的方法'訂單'錯誤。你能指出我可以在文檔中看到的方向嗎? – alexZ 2012-03-08 07:45:25

+0

答案是錯誤的。 Movies.all返回的數組不是範圍搜索。 – vise 2012-03-08 09:51:48

+0

你使用的是Rails 3嗎? – 2012-03-08 15:04:17

1

它應該是這樣的:

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

以這種方式鏈接去電影ID爲「sort_by_title」,我想這不是我們想要的.. – alexZ 2012-03-08 07:14:22