Ruby on rails 登录或注册(Ruby on rails)
我正在开发一个RubyonRails应用程序(2.3.x),我想制作一个表单,让用户登录或注册。我想用同样的方式来做。我有一个JS函数,可以替换如下表单元素:Ruby on rails 登录或注册(Ruby on rails),ruby-on-rails,ruby,validation,registration,login-control,Ruby On Rails,Ruby,Validation,Registration,Login Control,我正在开发一个RubyonRails应用程序(2.3.x),我想制作一个表单,让用户登录或注册。我想用同样的方式来做。我有一个JS函数,可以替换如下表单元素: <% form_for @user do |f| %> <div id="form"> <%= f.label :name, "Name" %> <%= f.text_field :name %> <%= f.label :email, "E-mail" %&
<% form_for @user do |f| %>
<div id="form">
<%= f.label :name, "Name" %>
<%= f.text_field :name %>
<%= f.label :email, "E-mail" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Password confirmation" %>
<%= f.password_field :password_confirmation %>
<%= link_to "I do have an account, "#", :id => "changeForm"%>
<%= f.submit "Register" %>
</div>
<% end %>
#if password_conf or the name are present the user has tried to register...
if params[:user][:password_confirmation].present? || params[:user][:name].present?
#so we'll try to save the user
if @user.save
#if the user is saved authenticate the user
current_session.user = User.authenticate(params[:user])
#if the user is logged in?
if current_session.user.present?
flash[:notice] = "succesvully logged
redirect_to some_routes_path
else
#not logged in...
flash[:notice] = "Not logged in"
render :action => "new"
end
else
#user not saved
render :action => "new"
end
else
#So if the params[:user][:password_confirmation] or [:user][:name] weren't present we geuss the user wants to login...
current_session.user = User.authenticate(params[:user])
#are we logged_in?
if current_session.user.present?
flash[:notice] = "Succesvully logged in"
redirect_to some_routes_path
else
#errors toevoegen
@user.errors.add(:email, "The combination of email/password isn't valid")
@user.errors.add(:password," ")
render :action => "new"
end
end
end
登入表格:
<% form_for @user do |f| %>
<div id="form">
<%= f.label :email, "E-mail" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.password_field :password %>
<%= link_to "I don't have an account, "#", :id => "changeForm"%>
<%= f.submit "Login" %>
</div>
<% end %>
如果没有验证,这(imho脏代码,不应该在控制器中)可以工作。但是我想使用validates\u presence\u方法,我不想当面抨击“约定优于配置”
所以我尝试过的另一件事是在表单中添加一个隐藏字段:
#login form
<%= f.hidden_field :login, :value => true %>
# and ofcourse set it to false if we want to register.
但这不起作用,因为我无法访问参数。并且登录不是用户对象的属性。但我认为,如果用户想要登录,我可以通过这种方式验证电子邮件和密码参数。以及所有其他属性(如果用户要注册)
所以我所能想到的并不是我想要的那样。所以我的主要目标是:
1使用用户模型中的验证方法进行登录/注册的表格。因此,如果我们想登录,但不填写任何信息=>请给出验证错误。如果用户想要登录,但电子邮件/密码组合不匹配,请输入“@user.errors.add”(:email,“在数据库中找不到该组合…”)。用户注册也是如此
提前谢谢 您应该将每个表单指向相应的控制器操作:
# Registration form
<% form_for @user, :url => users_path do |f| %>
...
<% end %>
# Login form, non-RESTful action
<% form_for @user, :url => login_users_path do |f| %>
...
<% end %>
您应该将每个表单指向相应的控制器操作:
# Registration form
<% form_for @user, :url => users_path do |f| %>
...
<% end %>
# Login form, non-RESTful action
<% form_for @user, :url => login_users_path do |f| %>
...
<% end %>
你为什么要用同样的路线做这件事?我同意Stef的观点。您可以让用户在同一页面上登录或注册,但让表单提交给不同的控制器或操作。为什么要使用相同的路径进行此操作?我同意Stef。您可以让用户登录或在同一页面上注册,但让表单提交给不同的控制器或操作。回答不错,但将来请指导用户使用更简单的路由帮助程序,例如
会话\u路径
,他们必须在配置/routes.rb
中自行生成。建议不错。更新了我的答案。谢谢。结果证明这是有效的!老兄,我现在觉得自己很笨。。。但是编码8小时后,您开始出错…回答得不错,但将来请指导用户使用更简单的路由帮助程序,例如会话\u path
,他们必须在配置/routes.rb
中生成这些帮助程序。建议不错。更新了我的答案。谢谢。结果证明这是有效的!老兄,我现在觉得自己很笨。。。但编码8小时后,你开始出错。。。
# Registration form
<% form_for @user, :url => users_path do |f| %>
...
<% end %>
# Login form, non-RESTful action
<% form_for @user, :url => login_users_path do |f| %>
...
<% end %>
# Use SessionsController (Sessions#Create) to create a new user session
<% form_for @user, :url => sessions_path do |f| %>
...
<% end %>