2

私はルートにこのラインを持っています:

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

そして、私は私の見解で次のヘルパーを使用します:

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

しかし、残念ながら、Railsが言うように、私のコードには何か問題があります。

#の未定義のメソッド `vote_for_question_path'

どうしたの?

4

1 に答える 1

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

-対応するコントローラーアクションには、引き続き「新規」という名前が付けられることに注意してください。これにより、次のようなURLが許可されます。

/ question /vote_for

ただし、自分がやろうとしているように見えることを見て、新しいVoteリソースの作成を検討することをお勧めします。これは、ユーザーが質問に投票したときに作成され、標準のRailsのRESTfulルーティング規則に適合します。質問に投票すると、次のようなURLを使用できます。

/ questions / 22 /votes / new

于 2009-06-02T11:08:10.097 に答える