超级简单身份验证railscast

时间:2012-12-12 22:15:22

标签: ruby-on-rails-3

我正在关注用于超级简单身份验证的导轨 http://railscasts.com/episodes/21-super-simple-authentication 我正在使用rails 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 =&gt;“show”,:controller =&gt;“user”}

当我用耙子查看我的路线时,我得到了这个。

 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'

所以我不知道screen-casts文件如何与行&lt;%form_tag user_path do%&gt;一起使用? 如果我将其更改为 new_user_path ,则会将我带到new.html.erb页面。但现在 密码:&lt;%= text_field_tag:密码%&gt;提交不会显示在页面上。我在这里做错了什么。

更新:

所以我创建了一个名为sessions的控制器而不是我的用户控制器应该没什么区别,但基于SHUMAcupcake评论我做错了,我决定删除我的用户控制器并创建一个叫做会话就像屏幕一样 - 投。我怀疑同样的问题发生了。现在唯一的区别是我的所有路由都被命名为会话,而不是预期的用户。

是的,我已经重新启动了我的应用,但问题仍然存在。请查看我的rake路由输出,你可以看到user_path将转到show动作,而不是它要去的地方,根据屏幕转换它的意图去创建动作。

2 个答案:

答案 0 :(得分:1)

您需要做的是在路径变量中使用复数,并将form_tag方法的结果写入HTML,如下所示:

<%= form_tag users_path do %>

答案 1 :(得分:0)

试试这个:

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

并检查您的用户mapp中是否有显示视图,并检查您在用户控制器中是否有show方法。

在users_controller.rb中有类似的东西:

def show
   #some code
end