轨道上的红宝石 - 没有匹配的路由 {:action=> "show" , :controller=> "users" }



我正在尝试实现一个Twitter Boostrap登录表单,它将在每个页面上使用(因为导航栏是布局的一部分)。

然而,当尝试下面的代码时,我得到了以下错误:

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"要在用户控制器中找到。

我想知道的另一件事是,为什么它会寻找动作"show",而在这种情况下它应该是"login"?

为什么会发生这种情况,我该怎么办?

您的错误在这行中

<%= 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选项会为您创建一个名为login_users_path的named_route,您可以在form_for上使用它。由于我们想做一篇文章,我们还需要在form_for 中指定

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

将您的routes.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| %>

resources :users仅添加默认路由。如果要添加新操作(除默认操作外),则需要使用"collection"。您可以指定方法getpost。添加到CCD_ 12。您可以通过运行rake routes获得path,然后在表单的action中添加正确的路由。

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

相关内容

  • 没有找到相关文章

最新更新