ActiveRecord :: StatementInvalid (OCIError: ORA-01741: недопустимый идентификатор нулевой длины: УДАЛИТЬ ИЗ "СЕССИЙ" ГДЕ "СЕССИИ". "" =: A1) - PullRequest
0 голосов
/ 13 ноября 2018

В моем приложении ruby ​​on rails, которое выполнялось в mysql, я использовал devise gem для аутентификации, и я храню сессии в базе данных.Теперь мне нужно перенести то же самое на оракул.Я скопировал данные и таблицы в Oracle и с помощью расширенного адаптера Oracle подключился к Oracle. Приложение работает, и когда я вхожу в систему, я получаю сообщение об ошибке ниже

  ActiveRecord::StatementInvalid (OCIError: ORA-01741: illegal zero-length identifier: DELETE FROM "SESSIONS" WHERE "SESSIONS"."" = :a1):
    stmt.c:82:in oci8lib_230.so
    ruby-oci8 (2.1.8) lib/oci8/cursor.rb:28:in `initialize'
    ruby-oci8 (2.1.8) lib/oci8/oci8.rb:177:in `new'
    ruby-oci8 (2.1.8) lib/oci8/oci8.rb:177:in `parse_internal'
    ruby-oci8 (2.1.8) lib/oci8/oci8.rb:170:in `parse'
    /home/garima/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/delegate.rb:341:in `block in delegating_block'
    activerecord-oracle_enhanced-adapter (1.6.3) lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb:109:in `prepare'

Я создал таблицу сеансов с триггером для добавленияЯ бы.Я мог видеть, что значения добавляются в таблицу сеансов.

  class SessionsController < Devise::SessionsController
    prepend_before_filter :user_active?, only: [:new, :create]

    # before_action :configure_sign_in_params, only: [:create]
    around_action :time_zone, only: [:create]
    after_action :locale, only: [:create]

    def user_active?
      if (!params["user"].blank?)
        @user=User.find_by(:email => params["user"]["email"])
        if (!@user.blank?)
          if (!@user.active)
            flash[:error] = I18n.t('devise.failure.inactive')
          elsif (!@user.email_verification_status)
            flash[:error] = I18n.t('signup.verification.not_yet_verified')
          else
            return true
          end
        else
          flash[:error] = I18n.t('login.errors.invalid')
        end
        redirect_to "/signin"
      end
    end

    # GET /resource/sign_in
    def new
      @sign_in = true
      super
    end

    # POST /resource/sign_in
    def create
      super do |_resource|
      end
    end

  end

  class User < ActiveRecord::Base
    extend FriendlyId
    devise :database_authenticatable,
           :recoverable,  :trackable, :validatable, :timeoutable

    before_validation :strip_whitespace, :only => [:email]
    default_scope {where(clean_up: false)}
    has_many :store_user_assignments
    has_many :stores, through: :store_user_assignments
    has_and_belongs_to_many :clients, join_table: :clients_users
    has_many :store_user_assignments
    has_many :stores, through: :store_user_assignments
    belongs_to :profile

    # This is required in order to allow integrity constraints to work as expected since email is the primary key and it is case insensitive
    before_save {self.email = email.downcase}
    before_save :update_full_name
    after_create :create_slug

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