2

我試圖實現一個Twitter Boostrap登錄表單,這將在每個頁面上使用(因爲導航欄是一個部分的佈局)。沒有路由匹配{:action =>「show」,:controller =>「users」}

然而,試圖代碼的時候下面我得到以下錯誤:

No route matches {:action=>"show", :controller=>"users"} 

用戶控制器:

class UsersController < ApplicationController 

    def index 
    @users = User.all 
    end 

    def show 
    ... 
    end 

    def login 
    ... 
    end 

end 

_navigation.html.erb:

<div class="dropdown-menu" style="padding: 15px; padding-bottom: 0px;"> 
    <%= form_for("user", :url => user_path) do |f| %> 
     <%= f.label :email%> 
     <%= f.text_field(:email, :size => 30, :class => 'login_field', :placeholder => 'Användarnamn')%> 
     <%= f.label :password%> 
     <%= f.text_field(:password, :size => 30, :class => 'login_field', :placeholder => 'Lösenord')%> 

     <%= f.submit "Logga in", :class => 'login_submit btn btn-primary' %> 
    <% end %> 
</div> 

的config/routes.rb文件:

get "home/index" 

resources :users 
resources :projects 
resources :tickets 

root :to => 'home#index' 

耙路線(即有用戶做):

users GET /users(.:format)    users#index 
      POST /users(.:format)    users#create 
new_user GET /users/new(.:format)   users#new 
edit_user GET /users/:id/edit(.:format) users#edit 
    user GET /users/:id(.:format)   users#show 
      PUT /users/:id(.:format)   users#update 
      DELETE /users/:id(.:format)   users#destroy 

我是新來的Rails,但覺得奇怪的是它抱怨說,路由不存在,因爲要在用戶控制器內部找到「show」操作。

我想知道的另一件事是爲什麼它尋找動作「顯示」,而在這種情況下它應該是「登錄」?

爲什麼會發生這種情況,我該怎麼辦?

+1

什麼是你的'配置/ routes.rb'文件是什麼樣子? –

+0

您可以在您的控制檯中執行'rake routes'並檢查用戶控制器的登錄操作路徑是什麼。如果登錄是用戶資源的集合操作,它應該是'login_users_path'。 –

+0

更新了我的問題! – holyredbeard

回答

5

你的錯誤是在這一行

<%= form_for("user", :url => user_path) do |f| %> 

user_path期待的ID。如果你將其更改爲users_path,那應該修復它,但我不認爲這是你的意圖。

更新:使用用戶控制器上的login動作,你需要更新你的路由

resources :users do 
    post :login, on: :collection, as: :login 
end 

傳遞:as選項創建named_route你叫login_users_path,你可以在你的form_for使用。因爲我們想做一個帖子,我們還需要指定在form_for

<%= form_for("user", :url => login_users_path, :html => { :method => :post }) do |f| %> 
+0

感謝您的回答!我嘗試了代碼,但得到了以下錯誤:「:0x007f8556f3a1c8>」 – holyredbeard

+1

對不起,應該是'login_users_path',忘記它是在一個資源 – jvnill

1

resources :users只添加默認路由。如果你想添加新的動作(其他默認值),你需要使用'collection。您可以指定方法getpost。加入後routes.rb。您可以通過運行rake routes來獲取path,然後在窗體的action中添加正確的路線。

resources :users, :collection => {:login => :post} 
2

更新您的路線。RB的樣子:

get "home/index" 

resources :users do 
    post :login, :on => :collection 
end 

resources :projects 
resources :tickets 

root :to => 'home#index' 

,並在您查看文件更改的form_for線爲:

<%= form_for("user", :url => login_users_path) do |f| %> 
相關問題