1

超単純認証 http://railscasts.com/episodes/21-super-simple-authenticationのレールキャストに従っています レール3を使用しているため、ルートとコントローラーの名前をから変更しています変更するのはユーザーへのセッションだけです

私は、スクリーンキャストで new.html.erb ファイルにある問題に遭遇しました。

<div class="content">
    <p>
        <% form_tag user_path do %>
            Password: <%= text_field_tag :password %>
        <%end%>
    </p>
</div>

これを試すと、エラーが発生しますhttp://localhost:3000/login

{:action="show", :controller="user"} に一致するルートはありません

rake を使用してルートを調べたところ、これが得られました。

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

私のルートファイルにはこれがあります。

  resources :user 
  match 'login' => 'user#new'
  match 'logout' => 'user#destroy'

そのため、スクリーン キャスト ファイルが <% form_tag user_path do %> という行でどのように機能するかわかりません。これを new_user_path に変更する、new.html.erb ページが表示されます。しかし、今は Password: <%= text_field_tag :password %> フィールドがページに表示されません。ここで何が間違っていますか。

アップデート:

そのため、ユーザーコントローラーの代わりにセッションと呼ばれるコントローラーを作成しましたが、SHUMAcupcakeのコメントに基づいて、間違っています。ユーザーコントローラーを削除して、スクリーンキャストと同じようにセッションと呼ばれるものを作成することにしました。私が疑ったように、同じ問題が発生します。唯一の違いは、すべてのルートが予想どおりユーザーではなくセッションという名前になっていることです。

はい、アプリを再起動しましたが、同じ問題が発生します。私の rake routes の出力を見てください。user_path が、スクリーンキャストによるとアクションを作成するための意図された場所ではなく、show アクションに移動していることがわかります。

4

2 に答える 2

1

パス変数で複数形を使用し、次のように form_tag メソッドの結果を HTML に書き込む必要があります。

<%= form_tag users_path do %>
于 2013-05-28T22:04:44.377 に答える
0

これを試して:

map.login 'login', :controller => 'users', :action => 'new' 
map.logout 'logout', :controller => 'users', :action => 'destroy'

また、ユーザー マップに show ビューがあるかどうかを確認し、ユーザー コントローラーに show メソッドがあることを確認します。

users_controller.rb では次のようになります。

def show
   #some code
end
于 2012-12-12T22:41:36.540 に答える