"существует?" метод не работает - пытается проверить, существует ли пользователь, перед сохранением в БД - PullRequest
0 голосов
/ 02 января 2019

Я новичок в Rails и пытаюсь создать форму для регистрации на моем сайте. Он работает нормально, за одним исключением - он сохраняет пользователей в базе данных без предварительной проверки, чтобы увидеть, существуют ли они. Как я могу убедиться, что пользователь существует перед тем, как сохранить его?

Пользовательский контроллер:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create 
    @user = User.new(user_params)
    if @user.exists?(:username) == false && @user.save(user_params)
      session[:id] = @user.id
      redirect_to posts_path
    else
      redirect_to '/signup'
    end
  end

  def edit

  end

  def update
  end

  def show
  end

  def destroy
  end

    private

  def user_params
    params.require(:user).permit(:username, :jabber_id, :password)
  end
end

Ответы [ 4 ]

0 голосов
/ 02 января 2019

Как почти все предложили вам выше, и это лучший способ использовать уникальность проверка.

Но, если вы хотите попробовать с существует? Вы можете сделать как,

User.exists? (Имя пользователя: params [: имя пользователя])

0 голосов
/ 02 января 2019

Очень простая проверка будет выглядеть примерно так:

# in your user.rb
validates :username, uniqueness: true

Вы можете игнорировать прописные и строчные буквы:

# in your user.rb
validates :username, uniqueness: { case_sensitive: false }

И измените ваш create метод на что-то вроде этого:

def create 
  @user = User.new(user_params)

  if @user.save 
    session[:id] = @user.id
    redirect_to posts_path
  else
    render :new
  end
end

Кроме того, я предлагаю также иметь уникальный индекс на уровне базы данных:

# in a migration
add_index :users, :username, unique: true
0 голосов
/ 02 января 2019

Как и предполагалось, вы должны использовать проверку модели для чего-то подобного.Однако вот почему ваш код не работает.

Метод exists? должен использоваться в классе модели, а не в его экземпляре, например:

Person.exists?(5)
Person.exists?(:name => "David")

Вышеэто из существует?документы

0 голосов
/ 02 января 2019

Используйте это в файле модели, например

validates_uniqueness_of :username #=> or specify :email or :name etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...