2009-06-02 20 views
2

でカスタムルートを通報します私はルートに次の行を持っているRailsの

 
link_to 'OK', vote_for_question_path(@question), :method => :put 
link_to 'NO', vote_against_question_path(@question), :method => :put 

しかし残念ながら私のコードに問題があり、 Railsのコメント:

undefined method `vote_for_question_path' for #

何が問題なのですか?

答えて

2

あなたのルート構文が間違っているようです。

新しいメンバールート(リソースの単一インスタンスに適用すなわちものを)追加したい場合は、あなたが行う必要があります。

map.resources :questions, 
       :member => { :vote_for => :put, :vote_against => :put }, 
       :has_many => :replies, :shallow => true 

一方で、あなたは標準を上書きする場合「新しい」URLセグメントが、次のようになります。対応するコントローラのアクションはまだ「新しい」と命名されることを

map.resources :questions, :path_names => { :new => 'vote_for' }, 
       :has_many => :replies, :shallow => true 

—注意。

/質問/ vote_forしかし

、あなたは新しいVoteリソースを作成することを検討することをお勧めしますやろうとしているように見えるものを見て:これは、URLは以下のようなことが可能になります。これは、ユーザが質問に投票したときに作成され、標準のRailsのRESTfulルーティング規約に適合します。質問に投票すると、URLは次のようになります。

/questions/22/votes/new

+0

ありがとう、それは動作します!あなたが提案したように、RESTfulな慣習を使用したいと思いますが、投票が+1か-1かどうかを/ question/22/votes/newを使って指定する方法はわかりません: – collimarco

+0

あなたのアプリケーションについてもっと知る必要はありません。一般的な考え方は、質問モデルが投票モデルに関連付けられていることです。これはユーザーモデルに関連付けられている可能性があります。ユーザーが質問に投票すると、投票インスタンスがコレクションに追加されますその質問の投票数を-1とすると、それは削除されます。 –

関連する問題