如果Record具有Array中的任何ID,则选择所有记录

时间:2016-05-24 08:54:05

标签: ruby-on-rails arrays postgresql activerecord has-many

早安溢出。

我在尝试选择存储在名为Treatments的数组中的任何ID的所有@problem时遇到问题。

这是我的治疗控制器。

@problem = Remedy.find_by_sql(["SELECT id FROM remedies WHERE LOWER(\"remedyName\") LIKE?", "%#{params[:searchremedy]}%".downcase])

 query = "SELECT * FROM treatments INNER JOIN remedies_treatments on treatments.id = remedies_treatments.treatment_id WHERE remedies_treatments.treatment_id LIKE ?"
 @pretreatments = Treatment.find_by_sql([query, @problem])

这是来自控制台的错误

ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR:  syntax error at or near ","
LINE 1: ...d WHERE remedies_treatments.treatment_id LIKE 233,234,224

' LIKE'操作员可能不是我想要做的事情 - 我尝试使用ANY操作员,但也无济于事。这个问题源于它是一个整数数组吗?

治疗模式。

class Treatment < ActiveRecord::Base

  has_and_belongs_to_many :remedy

end

补救模式。

class Remedy < ActiveRecord::Base

  has_and_belongs_to_many :treatments, dependent: :destroy
end

有一个跟进帖子,我的问题已解决here

1 个答案:

答案 0 :(得分:0)

使用ids数组选择记录是通过查询完成的:

Record.where(id: ids)

其中ids是ids数组。它可以替换为另一个查询。

对于您的情况,按匹配名称选择补救方法如下:

ids = Remedy.where("LOWER(remedyName) LIKE ?", name.downcase).pluck(:id)