3

我正在尝试构建一个注册模块,用户只有在他们的电子邮件已经在现有数据库中时才能注册。

楷模:

  1. 用户
  2. 老用户

用户的条件将是

if OldUser.find_by_email(params[:UserName]) exists, allow user registration.
If not, then indicate error message.

这在 PHP 中非常简单,我可以运行一个函数来执行 mysql 查询。但是,我无法弄清楚如何在 Rails 上做到这一点。看起来我必须创建一个自定义验证器函数,但对于这样一个简单的条件似乎有点过头了。

做起来应该很简单。我错过了什么?

任何指针?

编辑1:

dku.rajkumar 的这个解决方案稍作修改即可工作:

validate :check_email_existence
    def check_email_existence
      errors.add(:base, "Your email does not exist in our database") if OldUser.find_by_email(self.UserName).nil?
    end

对于这种情况,在模型中还是在控制器中进行验证更好?

4

3 回答 3

1

你可以这样做

if OldUser.find_by_email(params[:UserName])
   User.create(params) // something like this i guess
else
   flash[:error] = "Your email id does not exist in our database."
   redirect_to appropriate_url
end

更新:模型中的验证,因此验证将在调用时完成User.create

class User < ActiveRecord::Base

  validates :check_mail_id_presence

// other code
// other code

  private

  def check_mail_id_presence
     errors.add("Your email id does not exist in our database.") if OldUser.find_by_email(self.UserName).nil?
  end

end
于 2012-05-19T04:11:15.467 回答
0

我建议从设计开始。

https://github.com/plataformatec/devise

即使您有此类不寻常的需求,您通常也可以适应它。一旦你了解它,它就会非常强大、可靠且经过调试,你可以用它做各种各样的事情。

于 2012-05-19T04:13:15.803 回答
0

Bellow 只是用户注册相关操作的初始实现 .../app/controller/UsersController。


 def new
  @user = User.new
 end
 def create
  @user = User.new(params[:user])
  @old_user = User.find_by_email(user.email)
  if @old_user 
     if @user.save
      # Handle successful save
     else
     render 'new' # and render some error message telling why registration was not succeed 
     end
  else
   # render some page with some sort of error message of 'new' new users
  end
 end

更新: 查看以下资源以获取更多信息:

于 2012-05-19T04:30:43.490 回答