【问题标题】:Trying to do an auto complete in rails I keep getting an active record oci error尝试在 Rails 中自动完成我不断收到活动记录 oci 错误
【发布时间】:2015-03-19 16:00:45
【问题描述】:

我要做的基本上是对文本框进行自动完成... js 工作正常但是,我在活动记录和 oracle ruby​​-oci8 中一直遇到同样的错误。任何帮助将不胜感激。

这是错误

ActiveRecord::StatementInvalid (OCIError: ORA-00904: "'SNOWJ'": invalid ide ntifier: SELECT "EMPLOYEE".* FROM "EMPLOYEE"  WHERE ( emp_id like "'SNOWJ'" )):
app/controllers/user_controller.rb:7:in `emp_id_autocomplete'

这是我的视觉模型

class Visual < ActiveRecord::Base


establish_connection :vtest

self.table_name = 'employee'

belongs_to :user

scope :search_id, lambda {|id|
  where(%q{ emp_id like "?" }, id) 
}

end

这是我的用户模型

class User < ActiveRecord::Base

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

attr_accessible :emp_id, 

这是我的用户控制器

class UserController < ApplicationController


  def emp_id_autocomplete
    @query = params[:term]
    @json = Visual.search_id(@query).collect {|e| e.id}.uniq
    respond_to do |format|
      format.js  { render :json => @json.to_json, :layout => false }
    end
  end
end

这是我的看法

   <div class='row form-group'>
    <div class='col-xs-8 col-xs-offset-2 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 col-lg-2 col-lg-offset-5 text-right'>
      <%= f.text_field :emp_id, tabindex: 1, id: 'emp_id', autofocus: true, placeholder: t( 'login_label' ), class: 'form-control' %>
    </div>
  </div>

这是我的路线。

Rails.application.routes.draw do

# Routes for devise user authentication
devise_for :users, controllers: { sessions: 'sessions' }

 root to: 'entry#index'

 resources :entry do
 end

 resources :user do
   collection do
     get :emp_id_autocomplete
   end
 end

这是我的 app.js

//= require jquery
//= require jquery_ujs
//= require jquery.ui.all
//= require best_in_place
//= require bootstrap
//= require jquery.ui.datepicker
//= require moment.js
//= require fullcalendar
//= require daterangepicker.js
//= require entry
//= require user


 $(function() {
                $("#emp_id").autocomplete({
                  source: "user/emp_id_autocomplete",
                  minLength: 3
                });
 });

这些是我的表 用户表有 emp_id 并且可视模型被称为员工表并且有 id。我希望自动完成功能是查看 emp_id 文本框,然后在员工表中查找匹配或接近匹配的 ID(如果可能)...

用户模型表

  create_table "users"
    t.string   "emp_id"
    t.datetime "created_at"
    t.datetime "updated_at"

视觉模型表

 create_table "employee"
   t.string   "id"
   t.datetime "created_at"
   t.datetime "updated_at"

【问题讨论】:

    标签: jquery ruby ruby-on-rails-4 oci8 jquery-rails


    【解决方案1】:

    我认为你的引号有错误,请尝试替换:

    where(%q{ emp_id like "?" }, id) 
    

    与

    where("emp_id like ?", id) 
    

    【讨论】:

    • 我试过 where("emp_id like '?'", id) 现在得到了这个错误-------ActiveRecord::StatementInvalid (OCIError: ORA-00907: missing right parenthesis: SELECT "EMPLOYEE".* FROM "EMPLOYEE" WHERE (emp_id like ''SNOWJ''): app/controllers/user_controller.rb:7:in `emp_id_autocomplete' @Rustam A. Gasanov
    • @user3910236,我明白了,更新了答案,试试?没有任何引号
    • 我尝试了更新的答案,现在得到了这个.. ActiveRecord::StatementInvalid (OCIError: ORA-00904: "EMP_ID": invalid identifier: SELECT "EMPLOYEE".* FROM "EMPLOYEE" WHERE (emp_id像'SNOWJ')):@Rustam A. Gasanov app/controllers/user_controller.rb:7:in `emp_id_autocomplete'
    • @user3910236 现在错误告诉您employee 表中没有emp_id。您在 users 表中有此字段,所以这是您的逻辑问题,而不是 sql
    • @ Rustam A. Gasanov 好的,我现在将其更改为 id... 我收到此错误 ActiveRecord::SubclassNotFound (单表继承机制未能找到子类:'H'。此错误引发,因为列“类型”保留用于在继承的情况下存储类。如果您不打算将其用于存储继承类,请重命名此列,或覆盖 Visual.inheritance_column 以使用另一列获取该信息.): app/controllers/user_controller.rb:7:in `emp_id_autocomplete'
    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 2015-10-23
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多