2012-04-27 11 views
2

私はmatchでこれを行う方法を知っていますが、私は本当にリソースブロックでそれをやりたいのです。ここで私は(簡体字)しているものです:Railsルーティング:リソース/メンバブロック内のアクション名をオーバーライド

resources :stories do 
    member do 
    'put' collaborator 
    'delete' collaborator 
    end 
end 

私はURLで同じアクション名を許可しますが、コントローラで異なるエントリポイントを持つ方法を探しています。だから私はこの試みた

# PUT /stories/1/collaborator.json 
def add_collaborator 
    ... 
end 

# DELETE /stories/1/collaborator.json 
def remove_collaborator 
    ... 
end 

:現時点では私は私のコントローラに持って

resources :stories do 
    member do 
    'put' collaborator, :action => 'add_collaborator' 
    'delete' collaborator, :action => 'remove_collaborator' 
    end 
end 

を私はRSpecのユニットテストを書いたとき、これは動作していないようでした:

describe "PUT /stories/1/collaborator.json" do 
    it "adds a collaborator to the story" do 
    story = FactoryGirl.create :story 
    collaborator = FactoryGirl.create :user 

    xhr :put, :collaborator, :id => story.id, :collaborator_id => collaborator.id 

    # shoulds go here... 
end 

エンド

私はこのエラーを取得する:

Finished in 0.23594 seconds 
5 examples, 1 failure, 1 pending 

Failed examples: 

rspec ./spec/controllers/stories_controller_spec.rb:78 # StoriesController PUT  
    /stories/1/collaborator.json adds a collaborator to the story 

私のルートを定義しようとしている方法が間違っているため、このエラーが発生していると思われます。

答えて

2

次の方が良いですか?

resources :stories do 
member do 
    put 'collaborator' => 'controller_name#add_collaborator' 
    delete 'collaborator' => 'controller_name#remove_collaborator' 
end 
end 

また、端末に起動することによって、あなたのルートを確認する必要があります。

$ rake routes > routes.txt 

そして、ルートはあなたのroutes.rbをファイルから生成されているかを確認するために生成routes.txtファイルを開きます。

+0

これはレーキルートの出力に正しく表示され、私は永遠に感謝しています:)私はまだrspecの障害が発生していますが、今は少なくとも私のルートが壊れていないことを知っています。ありがとう! – jaydel

+0

あなたの歓迎です、あなたのrspecの失敗をさらに助けることができますか? – Kulgar

+0

それはすばらしいでしょう。私は、getルートを使用して、それを:pathという名前で命名するもっと簡単な例を試してみました。ブラウザからは完全に動作します。 'xhr:get、:test_path'を実行すると、私の元の投稿と同じ基本メッセージで経路を見つけることができません。 – jaydel

関連する問題