Проверьте, существует ли запись в контроллере - PullRequest
0 голосов
/ 07 ноября 2018

При регистрации я хочу проверить, существует ли данное письмо нового пользователя в моем контроллере или нет.

class LoginsController < ApplicationController
  skip_before_action :verify_authenticity_token

  def index
    @subscriber = Subscriber.new()
  end

  def sign_up
    subscriberNew = Subscriber.new
    subscriberNew.name = params[:name]
    subscriberNew.cus_user_name = params[:user_name]
    subscriberNew.cus_password = params[:password]
    subscriberNew.cus_email = params[:email]
    subscriberNew.mobile_no = params[:phone]

    #if Email exists sends and error message
    #...................

    #if email does not exist, save the response to database
    result = subscriberNew.save
    respond_to do |format|
      msg = {:status => "ok", :message => "Success!"}
      format.json  {render :json => msg}
    end
  end
end

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Существует несколько способов проверки уникальных записей, одним из лучших подходов может быть изменение базы данных для установки уникального индекса для электронной почты:

add_index :users, :username, unique: true (в вашей миграции)

Подход с индексом БД лучше в долгосрочной перспективе (см., Например, this )

Вы также можете проверить его в вашем контроллере before_action:

before_action :validate_email, only: [:sign_up]

...

private


def validate_email
  # Or whatever way of sending a message you prefer
  flash[:notice] = "A user with this email already exists" 
  redirect_to root_path if User.where(email: params[:email]).exists?
end

Я бы порекомендовал прочитать далее о проверках Active Record в Rails Guides .

0 голосов
/ 07 ноября 2018

Добавить подтверждение для электронной почты с uniqueness: true https://guides.rubyonrails.org/active_record_validations.html#uniqueness

Вы можете сделать что-то вроде:

class Subscriber < ApplicationRecord
  validates :email, uniqueness: true
end

и о действии:

subscriberNew.valid?

if subscriberNew.errors[:email].present?
  #show_error
else
  #success
end

Я бы порекомендовал вам прочитать об соглашениях по именованию рельсов, проверках с использованием activerecord, а также соглашениях при создании формы (с form_for helper) и строгих параметрах https://guides.rubyonrails.org/action_controller_overview.html#strong-parameters.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...