0

何が間違っているのかわかりません。これは私のルートです:

resources :stores do 
   get '/add_shoes' => 'stores#add_shoes', :as => :add_shoes
end

そして、私のパスは次のようになります。<%= link_to "Add Shoes", add_shoes_path %>

しかし、パスが存在しないというエラーが発生します。両方を使用するにはどうすればよいですか?

4

1 に答える 1

2

正しく思い出せば、resourcesブロックにネストされているため、最後に追加storesされます。したがって、正しいルートはadd_shoes_stores_pathです。add_shoes_stores_index_pathを提供するために、最後にインデックスを追加することもあります(理由はわかりません)。

通話なので、いつでもブロックgetの外に置くことができます。resources

さらに、それを行うためのより多くのRailsの方法は次のようになります。

resources :stores do
  collection do
    get :add_shoes
  end
end

あなたはそれをどのように扱いたいかについてここにたくさんのオプションがあります。rake routesただし、簡単なヒントとして、コマンドラインからいつでも入力して、使用可能なすべてのルートとそれらが指す場所のリストを取得できます。

コードを明確にするためにこのようにすることを検討している場合は、次のことを覚えておいてください。ルートには、ポイントしている場所を常に記載する必要があります。それはとの両方add_shoesになりstoresます。それは実際には冗長ではないので、持っているadd_shoes_pathことは文字通り任意のコントローラーを指すことができます。私は間違いなくRailsのやり方に固執します-深く掘り下げるにつれて、それはより理にかなっています。

最後に、別の考え-店舗モデルに靴を追加する場合、各店舗に靴があることは理にかなっています。おそらく、Shoesの新しいモデルを作成し、RESTFULルーティングを使用する必要があります。

于 2012-05-15T22:10:13.080 に答える