尝试在 rails 中自动完成我不断收到活动记录 oci 错误
Trying to do an auto complete in rails I keep getting an active record oci error
我想做的基本上是为文本框自动完成...js 工作正常但是,我将 运行 保持在与活动记录和 oracle [=45] 相同的错误中=]-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
});
});
这些是我的 tables 用户 table 有 emp_id 并且视觉模型实际上称为员工 table 并且有 id。我想让自动完成功能做的是查看 emp_id 文本框,然后在员工 table 中查找匹配或接近匹配的 ID...
用户模型table
create_table "users"
t.string "emp_id"
t.datetime "created_at"
t.datetime "updated_at"
视觉模型table
create_table "employee"
t.string "id"
t.datetime "created_at"
t.datetime "updated_at"
我认为你的引号有误,尝试替换:
where(%q{ emp_id like "?" }, id)
和
where("emp_id like ?", id)
我想做的基本上是为文本框自动完成...js 工作正常但是,我将 运行 保持在与活动记录和 oracle [=45] 相同的错误中=]-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
});
});
这些是我的 tables 用户 table 有 emp_id 并且视觉模型实际上称为员工 table 并且有 id。我想让自动完成功能做的是查看 emp_id 文本框,然后在员工 table 中查找匹配或接近匹配的 ID...
用户模型table
create_table "users"
t.string "emp_id"
t.datetime "created_at"
t.datetime "updated_at"
视觉模型table
create_table "employee"
t.string "id"
t.datetime "created_at"
t.datetime "updated_at"
我认为你的引号有误,尝试替换:
where(%q{ emp_id like "?" }, id)
和
where("emp_id like ?", id)