我最近开始使用Ruby on Rails并使用Devise gem进行身份验证。当我开始尝试使用Devise Gem的新应用程序时,我工作得很好。但是,我正在使用的模板在主页上同时具有登录和注册表单。由于Devise创建了两个新视图,我不需要它们,我将不得不将这两个视图代码移动到我的home.html.erb文件中。
我遇到的问题是,在关注these steps之后,表单已创建,我填写用户名和密码,但按下提交按钮绝对没有任何意义。此外,在提交底部下创建了三个链接;登录,注册和忘记密码,将我重定向到Devise创建的页面,我试图避免使用相同的页面。
我看过很多地方,但没有运气。我有一周的RoR经验和两天的Devise Gem经验,所以我必须做一些荒谬的愚蠢行为。有帮助吗?
以下是我复制到home.html.erb文件的登录表单
<%= form_for("user", :url => user_session_path) do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<% if devise_mapping.rememberable? -%>
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
<% end -%>
<div><%= f.submit "Sign in" %></div>
<% end %>
<%= render "devise/shared/links" %>
这是我的应用程序帮助文件:
module ApplicationHelper
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
end
和我的config / routes.rb文件:
devise_for :users
root 'pages#home'
编辑推荐routes.rb
get "pages/home"
devise_for :users
devise_scope :users do
get "pages/home", :to => "devise/sessions#new"
post "/users/sign_in", :to => "devise/sessions#create", :as => :sign_in
end
仍然没有结果。
答案 0 :(得分:0)
不确定您的路线是如何设置的,但如果您想要显示自定义登录/注册视图并让它指向适当的位置,您需要确保更改设计路线的范围并将它们引导到您的自定义视图/路线。
例如,如果您想更改您的注册后路线(点击提交后),您可能会遇到以下情况:
devise_scope :user do
get "/home", :to => "devise/sessions#new", :as => :home
post "/users/sign_up", :to => "devise/sessions#create", :as => :sign_up
end
我只是为你的目的编写了名称间距,但可能会有所不同。
值得一看的是Devise文档,它更详细地描述了如何更改默认登录和注册路由here
希望这会有所帮助。
在进一步研究之后,尽管上面的信息对您有所帮助,但我认为您的问题实际上可能是您缺少:用户在form_for的第一行。试着这样做:
<%= form_for(:user, :url => user_session_path(:user)) do |f| %>
这就是我在上面提供的链接中显示的内容。