查询:
company_ids = [2,6,15,1,3]
@people = Person.where("company_id IN (?)", company_ids)
总是返回@people
按company_ids
数组排序?
如果没有,最佳做法是添加.order()
之类的:
c_ids = company_ids.collect{|c_id| "company_id = #{c_id}"}
@people = Person.where("company_id IN (?)", company_ids).order( c_ids.join(',') )
答案 0 :(得分:0)
@people = Person.where("company_id IN (?)", company_ids).order(id: :desc).map(&:id)
未经测试可以试试这个。
答案 1 :(得分:0)
不,它没有。
您可以在SQL中执行此操作,但查询语法将取决于您使用的数据库。对于MySQL,这样的事情应该有效:
@people = Person.where("company_id IN (?)", company_ids).order("field(company_id, #{company_ids.join(',')})")
我认为在PostgreSQL中有一种简单的方法可以做到这一点,但除非你有数百万行,否则你可以在Ruby中进行排序:
index = Person.where("company_id IN (?)", company_ids).group_by(&:company_id)
@people = company_ids.map{|id| index[id]}.flatten
--- --- EDIT
你可以在PostgreSQL中做同样的事情:
Person.where("company_id IN (?)", company_ids).order("CASE #{company_ids.map{|id| "WHEN company_id='#{id}' THEN #{company_ids.index(id)}"}.join(' ')} END;")
答案 2 :(得分:-1)
@people = Person.where("company_id IN (?)", company_ids).order("company_id")
这将确保您通过company_id在订单中始终拥有@people。如果您有其他想法,请发表评论。