2017-05-31 256 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 ' –