Очень простая проверка будет выглядеть примерно так:
# 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