如果记录与数组中的任何ID具有相同的id,请选择记录

我无法找到正确的语法和运算符来检查记录是否与存储在Array中的任何ID具有相同的ID。 has any? function还是类似?

 @problem = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) @pretreatments = Treatment.joins(:remedies_treatment).where(:remedies_treatment_remedy_id == @problem) 

我已将代码更新为:

  ids = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) @pretreatments = Treatment.joins(:remedies_treatments).where(remedies_treatments: { remedy_id: @problem }) 

但是我现在得到的错误是:

  SELECT "treatments".* FROM "treatments" INNER JOIN "remedies_treatments" ON "remedies_treatments"."treatment_id" = "treatments"."id" WHERE "remedies_treatment"."remedy_id" IS NULL Completed 500 Internal Server Error in 157ms (ActiveRecord: 17.0ms) ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "remedies_treatment" LINE 1: ...atments"."treatment_id" = "treatments"."id" WHERE "remedies_... ^ : SELECT "treatments".* FROM "treatments" INNER JOIN "remedies_treatments" ON "remedies_treatments"."treatment_id" = "treatments"."id" WHERE "remedies_treatment"."remedy_id" IS NULL): app/controllers/treatments_controller.rb:116:in `index' ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "remedies_treatment" LINE 1: ...atments"."treatment_id" = "treatments"."id" WHERE "remedies_... ^ : SELECT "treatments".* FROM "treatments" INNER JOIN "remedies_treatments" ON "remedies_treatments"."treatment_id" = "treatments"."id" WHERE "remedies_treatment"."remedy_id" IS NULL from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec' 

由于您希望匹配ID,因此请获取列表,并在下一个查询中使用它:

 ids = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) Treatment.joins(:remedies_treatments).where(remedies_treatments: { remedy_id: ids }) 

注意 :您应该在Treatment具有以下关系:

 class Treatment has_many :remedies_treatments end 

使用ActiveRecord,您可以从数据库中搜索匹配的记录:

 @problem = Remedy.where(["LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase]).pluck(:id) @pretreatments = Treatment.joins(:remedies_treatment).where(:remedies_treatment_remedy_id: @problem) 

这将使用where子句的Hash语法,方法是指定要检索其中remedies_treatment_remedy_id包含@problem任何值的任何记录。