2017-05-31 255 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

請求是一個非常糟糕的模型名稱,因爲您最終屏蔽了請求對象(傳入的r equest),它讓事情變得非常混亂。 – max

回答

1

首先,爲什麼你對requests#show#new多條路線?

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

同樣,對於User太..

或者,我可以看到,你有一個show動作定製的路線,你應該限制你的路線resources一樣,

resources :requests, except: [:show, :new] 

其次,如@max所示,您應該考慮更改資源名稱,Request不是一個好的選擇。

第三,解決方案,嘗試as:選項,可以在你的link_to選項如下使用,

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

然後在您的視圖命名您的路徑,

<%= link_to request_path request %> 

你應該結帳docs以更好地理解它..

+0

我試過這個,但它仍然無法工作。鏈接發送給我的url「request.1」而不是「requests/1」 – ben

+0

然後不要複數化,試試'get'/ show /:id',將'request#show',作爲:: request ' –