1

我正在关注超级简单身份验证的 rails cast 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=>"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'

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

在 users_controller.rb 中是这样的:

def show
   #some code
end
于 2012-12-12T22:41:36.540 回答