3

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 / routers.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つのことは、アクション「show」を検索するのに、この場合は「login」である必要があるのはなぜかということです。

なぜこれが起こっているのですか、そして私は何をしますか?

4

3 に答える 3

5

あなたのエラーはこの行にあります

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

user_pathIDを期待しています。それを に変更するとusers_path、修正されるはずですが、それはあなたの意図ではないと思います。

更新:loginユーザー コントローラーでアクションを使用するには、ルートを更新する必要があります

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

オプションを渡すと、で使用できる:as、呼び出された named_route が作成されます。投稿をしたかったので、それも指定する必要がありますlogin_users_pathform_forform_for

<%= form_for("user", :url => login_users_path, :html => { :method => :post }) do |f| %>
于 2013-02-06T14:48:44.407 に答える
2

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| %>
于 2013-02-06T14:49:05.483 に答える
1

resources :usersデフォルト ルートのみを追加します。新しいアクション (デフォルト以外) を追加する場合は、' を使用する必要がありますcollectiongetまた、メソッドまたはを指定できますpost。に追加した後routes.rbpathを実行して取得し、フォームrake routesに正しいルートを追加します。action

   resources :users, :collection => {:login => :post}
于 2013-02-06T14:47:01.063 に答える