3

電子メールが既存のデータベースに既にある場合にのみユーザーが登録できる登録モジュールを構築しようとしています。

モデル:

  1. ユーザー
  2. 旧ユーザー

ユーザーの条件は

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

これは、関数を実行して mysql クエリを実行するだけの PHP で行うのは非常に簡単です。しかし、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

Deviseから始めることをお勧めします。

https://github.com/plataformatec/deviseを参照

このような特殊なニーズがあっても、通常は適応できます。それを理解すると、非常に強力で、堅実で、デバッグされており、あらゆる種類のことができます。

于 2012-05-19T04:13:15.803 に答える
0

以下は、ユーザー登録関連のアクションの初期実装 .../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 に答える