2017-05-31 11 views
1

私はオブジェクトのインデックスを作成しました。リクエストには住所と本文があります。私は、リンクとしてアドレスを表示するためのインデックスを設定し、その特定のオブジェクトの表示ページに行くためにリンクを取得しようとしているが、それはオブジェクトの作成ページに私をルーティングします。Ruby on Railsインデックスルーティング

routes.rbを:

Rails.application.routes.draw do 

    get 'quote/new' 

    get 'quote/create' 

    devise_for :admins 

    get '/login', to: 'sessions#new' 
    devise_for :users 
    root 'static_pages#home' 
    resources :users do 
    collection do 
     get :signup 
     get :login 
    post :login 
    get :logout 
    end 
end 

    get '/about', to: 'static_pages#about' 
    get '/contact', to: 'static_pages#contact' 
    get '/signup', to: 'users#new' 
    get '/request', to: 'requests#new' 

    get '/account', to: 'users#show' 
    get '/show', to: 'request#show' 

    resources :users 
    resources :requests 

    post '/login', to: 'users#show' 
    delete '/logout', to: 'sessions#destroy' 

end 

インデックスhtmlページ:まず

<h1>All Requests</h1> 

<ul> 
    <% @requests.each do |request| %> 
    <li> 
     <%= link_to request.address, request %> 
    </li> 
    <% end %> 
</ul> 
+6

リクエストは本当に悪いモデル名です平等)、物事は非常に混乱してしまいます。 – max

答えて

1

、なぜあなたはrequests#show#newのための複数のルートがありますか?あまりにUser ...

それとも私が見ることができるようにのために同様に

get '/request', to: 'requests#new' 
get '/show', to: 'request#show' 
resources :requests 

、あなたはshowアクション用のカスタムルートを持っている、あなたは第二resources

、などの
resources :requests, except: [:show, :new] 

のためのあなたのルートを制限する必要があり、 @maxで示唆されているように、リソース名を変更すると考えるべきで、Requestは良い選択ではありません。解決のための

第三に、あなたのビューに続いて、以下のようにあなたのlink_toオプションで使用することができas:オプションで

get '/show/:id', to: 'requests#show', as: :request #notice the :id and plurality of action 

をあなたのパスに名前を付けてみてください、

<%= link_to request_path request %> 

あなたがチェックアウトする必要がありますあなたがリクエストオブジェクト(受信Rマスキング終わるようdocsはそれをよりよく理解するために...

+0

私はこれを試み、それは動作し続けた。リンクは "requests/1"の代わりに "request.1"というURLに私を送ります。 – ben

+0

これを複数形にしないでください。この 'get '/ show /:id'を使って、 'request#show' ' –