2012-03-19 16 views
0

Railsを使い始めたばかりで、ルートの定義に問題があります。私は問題を解決するように見える文書のどれも、未定義のローカル変数またはメソッドエラーを取得しています。Railsルート - 未定義のローカル変数またはメソッド

リンクをクリックして、特定の操作、sortitを行う必要があります。 sortitは、mystuffオブジェクトをソートして索引ページにリダイレクトするため、ビューがありません。あらかじめ定義されたアクションの1つを使用すると、実際はすべてが機能します。もちろん、あらかじめ定義されたアクションのどれも私がしたいことではありません。

私/config/routes.rbファイル:

match "/mystuff/sortit'", :controller => "mystuff", :action => "sortit" 

resources :mystuff 

私/app/controllers/mystuff_controller.rbファイル

class MystuffController < ApplicationController 
.... 
    def sortit 
    @mystuff.sort 
    redirect_to_mystuff_path 
    end 
.... 
end 

私/app/views/mystuff/index.html.hamlファイル:

-# This file is app/views/mystuff/index.html.haml 
%h1 All My Stuff 

%table#mystuff 
    %thead 
    %tr 
     %th= link_to raw("Type"), sortit 
.... 

私が言ったように、私が定義済みのアクションでsortitを置き換えると、そのアクションが実行されます。しかし、このエラーでソートが失敗する:

undefined local variable or method `sortit' for #<#<Class:0x9997a10>:0x997c0f8> 
app/views/mystuff/index.html.haml:7:in `_app_views_mystuff_index_html_haml__61272557_87671610' 

私は何が欠けているのですか?どのようにタイプに対して生成されたリンクをクリックするとソートが実行されますか?

ありがとうございます!

PS:私レーキ経路出力:

のMyStuff GET /のMyStuff(:フォーマット){:アクション=> "インデックス":コントローラ=> "のMyStuff"}

....

mystuff_sortit /のMyStuff/sortit(:フォーマット){=> "のMyStuff" コントローラ、:アクション=> "sortit"}

....

だからルート熊手と私の経路を示しt彼はmystuff_soritという名前をつけていますが、オブジェクト名の先頭にあるアクションではありませんか?代わりにsortit_mystuffではありませんか?

+0

もちろん、上記のmystuffは実際にはmystuffsです。 –

+0

私はルートマッチラインにキーを追加したいと思います:as => 'sortit'、そしてsortit_pathまたはsortit_urlをsortitの代わりに呼び出します。 –

+0

@Thanatos - ありがとう - それは、index.htmlページが表示されたときにエラーを生成しませんでしたが、ソートリンクをクリックしても失敗しました。 routes.rbで、私は追加しました: - とindex.html.hamlのsortit_urlです。しかし、これはどこに文書化されていますか? :action => "sortit"が指定されています。理由は何ですか?必要に応じて_url "suffix"はどこに文書化されていますか?

ルート。RB:

一致 "/のMyStuff/sortit '"、:コントローラ=> "のMyStuff":アクション=> "sortit":など=> "sortit" 生( "タイプ" のlink_to =番目

% )、sortit_url

答えて

0

いることができますあなたの行動はsortitですが、あなたのビューは、実際にmy_stuffs_path(複数)となりますindex

index

redirect_toにあなたの行動にもスペースを必要とする変更、そう使うredirect_to mystuff_path ... ですrake routes(コマンドラインで、最も有用です)を参照してください。これはルートのリソースとして定義されています。

+0

sortitは実際のアクションです。それは実装されなければならない。 mystuffのリストをソートしてインデックスページを再表示するので、ビューはありません。私はオリジナルの投稿を編集した最初の2行のrakesルート出力 –

+0

のインデックスも実装されているアクションです。オプションとしてソートを追加することをお勧めします。 –

関連する問題