0

Edx の SaaS クラスの一部として、私の最初の Rails アプリケーションに苦労しています。おそらくかなり基本的なルーティングの問題で立ち往生しています。

検索、試行錯誤の結果、以下の控えめな試みしか得られなかったので、stackoverflow に最初のショットを与えています。

タスクは、ヘッダーをクリックしたときに「映画」テーブルの「タイトル」列をソート可能にすることです。これまでのところ、「link_to」..「movie_path...」の太字部分を追加しました。

%h1 All Movies
%table#movies
  %thead
    %tr
      %th= link_to "Movie Title", movie_path(:sort => "title")
      %th Rating
      %th Release Date
      %th More Info
  %tbody
  ...

私の routes.rb ファイルには、に基づいて自動生成されたルートしかありませんresources :movies。「並べ替え」オプションを処理するために、MoviesController の基本的な「インデックス」メソッドを次のように変更しました。

def index
  sort = params[:sort]
  @movies = Movie.find(:all, **:order => "title"**) **if :sort == "title"**
end

今、私はこのエラーメッセージを受け取っています:

Started GET "/movies" for 127.0.0.1 at 2013-01-27 14:58:55 -0600
  Processing by MoviesController#index as HTML
Rendered movies/index.html.haml within layouts/application (1.6ms)
Completed 500 Internal Server Error in 20ms

ActionView::Template::Error (No route matches {:action=>"show", :controller=>"movies"}):
    4: %table#movies
    5:   %thead
    6:     %tr
    7:       %th#title_header= link_to "Movie Title", movie_path
    8:       %th Rating
    9:       %th Release Date
    10:       %th More Info
  app/views/movies/index.html.haml:7:in `_app_views_movies_index_html_haml__237103960__639242128'

質問:

  • に「sort」オプションを含めるのではなく、別のメソッド「sort」を定義する必要がありますindexか?
  • どちらの場合でも、リクエストを適切にルーティングする方法は?

前もって感謝します!

4

1 に答える 1

0

それは素晴らしいクラスでした!あなたが自分でそれを理解できないかどうか尋ねるように言われたとき、あなたは注意を払っていたようです。

コメントが示唆しているように、が必要ですがmovies_path、コードにはまだ別の問題があります。

現在、変数を設定していますが、変数ではなくシンボル (基本的には定数) をsortチェックしています。:sort

ifまた、行末にを付けると、行全体に影響します。あなたが今持っているので、あなたは決して割り当てることはありません@movies

それが役立つことを願っています。

于 2013-01-28T04:29:34.417 に答える