我正在关注用于超级简单身份验证的导轨 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动作,而不是它要去的地方,根据屏幕转换它的意图去创建动作。
答案 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