我对 Rails 非常陌生,并且有点挣扎。
我的用户遵循基本的注册、编辑流程。
我有一种情况,用户可以“部分注册”,即数据库中的用户电子邮件地址具有随机密码,因为他们通过现有用户的邀请过程放入其中。
当技术上已经存在于数据库中的受邀用户尝试注册时,我会得到“电子邮件已经存在”,因为我确实对用户对象应用了唯一性检查,并且在表上设置了唯一索引。
我确实将其关闭并在 create 方法中使用 if 语句来查看用户是否存在并检查其他值是否进行了更新或新建并保存。所有 if 条件都被忽略并创建了一个新用户。
我想要做的是使用“创建”用户的相同注册表单,以使用输入的密码和名称更新现有的“部分注册”用户(如果存在)(电子邮件地址检查),并且其他数据库标志设置为 true。如果用户确实存在但不满足条件,则加载“忘记密码”页面,或者如果用户是新用户,则创建并保存。
关于如何实现上述目标的任何帮助或建议都将是绝妙的。
谢谢
维姬
这是我的设置:
用户类
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :email, :name, :password, :password_confirmation, :tandc
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, :presence => true,
:length => { :maximum => 50 }
validates :email, :presence => true,
:format => {:with => email_regex },
:uniqueness => { :case_sensitive => false }
validates :password, :presence => true,
:confirmation => true,
:length => { :within => 6..40 }
validates :tandc, :presence => true
before_save :encrypt_password
.
.
.
end
我有一个带有以下内容的 UsersController
def new
@user = User.new
@title = "Sign Up"
end
def create
if @user.save
sign_in @user
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
def update
if @user.update_attributes(params[:user])
redirect_to @user
else
@title = "Edit"
render 'edit'
end
end
.
.
.
我有意见:用户 > new.html.erb
<%= form_for(@user, :html => { :class => "validateUser", :name =>"edit_user"}) do |f| %>
.
.
.
form stuff here
.
.
.
<% end %>
和用户 > edit.html.erb
<%= form_for(@user, :html => { :class => "validateUser", :name =>"edit_user"}) do |f| %>
.
.
.
form stuff here
.
.
.
<% end %>
我的用户路线如下
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy