控制器#方法中的ActiveRecord :: StatementInvalid

yer*_*syl 1 ruby ruby-on-rails ruby-on-rails-4

我正在进行复杂的搜索,为此我有特殊的模型:

create_table "cmdb_searches", force: :cascade do |t|
  t.string   "client"
  t.string   "in"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end
Run Code Online (Sandbox Code Playgroud)

和evms_controller中的方法搜索:

def search
  @cisearch = CmdbSearch.new(search_params)
  @evms = Evm.order('id DESC')
  @evms = @evms.where('client_name=?',@cisearch.client) if #cisearch.client.present?
  @evms = @evms.where('in=?',@cisearch.in) if @cisearch.in.present?
  respond_to do |format|
    format.js
  end
end
Run Code Online (Sandbox Code Playgroud)

并且我的js文件用响应填充了适当的div.如果我将表格留空或仅填写:客户字段,但是如果我填写:它在字段中它将返回错误:

SQLite3::SQLException: near "in": syntax error: SELECT "evms".* FROM "evms" WHERE (in='234543')  ORDER BY id DESC
Run Code Online (Sandbox Code Playgroud)

D-s*_*ide 5

in是一个SQL运算符.虽然从技术上讲你可以将它用作列名,但为此,你必须将其转义.这就是我试图避免在查询中使用纯SQL的原因.

替换@evms.where('in=?',@cisearch.in)@evms.where(in: @cisearch.in).这样它将被正确地逃脱.