2

これを行う方法は知っていますmatchが、リソースブロックで実際に行いたいです。これが私が持っているものです(簡略化):

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

このエラーは、ルートを定義しようとしている方法が間違っているためだと思います...何か提案はありますか?

4

1 に答える 1

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.txtファイルを開いて、routes.rbファイルから生成されたルートを確認します。

于 2012-04-27T16:07:24.243 に答える