Ruby on rails 首先显示具有特定ID的记录
我必须在一个页面上显示所有用户。 但是我有一个Ruby on rails 首先显示具有特定ID的记录,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我必须在一个页面上显示所有用户。 但是我有一个数组,它使用了用户的一些ID,比如[1,2,3] 我想在一个页面上显示所有记录,但列表中包含的记录应该在顶部。 可以通过ActiveRecord查询来完成吗?或者我必须先获取所有用户,然后对其进行一些操作您只需执行两个单独的查询并合并结果: User.where("id IN (?)", ids) + User.where("id NOT IN (?)", ids) 更复杂的解决方案是一次获取所有用户,然后使用自定义排序方法对其进行排序,该方法更喜
数组
,它使用了用户的一些ID
,比如[1,2,3]
我想在一个页面上显示所有记录,但列表中包含的记录应该在顶部。
可以通过
ActiveRecord
查询来完成吗?或者我必须先获取所有用户,然后对其进行一些操作您只需执行两个单独的查询并合并结果:
User.where("id IN (?)", ids) + User.where("id NOT IN (?)", ids)
更复杂的解决方案是一次获取所有用户,然后使用自定义排序方法对其进行排序,该方法更喜欢数组中的数字。您只需执行两个单独的查询并合并结果:
User.where("id IN (?)", ids) + User.where("id NOT IN (?)", ids)
一个更复杂的解决方案是一次获取所有用户,然后使用自定义排序方法对其进行排序,该方法更喜欢数组中的数字。至少在MySQL中是这样的:
User.order("id IN (#{array.join(',')}) DESC")
当然,您需要小心使用此解决方案完全控制数组
内容。此外,如果数组
为空,则会中断,因此必须检查其是否为空,例如:
@users = array.any? ? User.order("id IN (#{array.join(',')}) DESC") : User.all
这种方法的优点是在末尾仍然有
ActiveRecord::Relation
对象,您可以在该对象上调用另一个AREL方法,如where
,或应用分页 至少在MySQL中是这样的:
User.order("id IN (#{array.join(',')}) DESC")
当然,您需要小心使用此解决方案完全控制数组
内容。此外,如果数组
为空,则会中断,因此必须检查其是否为空,例如:
@users = array.any? ? User.order("id IN (#{array.join(',')}) DESC") : User.all
这种方法的优点是在末尾仍然有
ActiveRecord::Relation
对象,您可以在该对象上调用另一个AREL方法,如where
,或应用分页 这是一个很好的答案,希望id
的数量永远不要增加到'000st这是一个很好的答案,希望id
的数量永远不要增加到'000st如果数组为空[],则此操作会中断。可以在查询中修复吗?@NitinJ可能不会,我想你必须检查Ruby中的数组是否为空。你能看到Jacob解决方案并告诉我更好的方法是什么吗?是的,我可以。在我的解决方案中,结果仍然是ActiveRecord::Relation
,您可以在其上调用AREL方法,如where
,或者应用分页。您是否可以编辑答案,这样它会说用户必须注意数组的空性,因为这将有助于使用此答案的人,并且它可以与postgresql一起使用。如果数组为空[],则此选项也会中断。可以在查询中修复吗?@NitinJ可能不会,我想你必须检查Ruby中的数组是否为空。你能看到Jacob解决方案并告诉我更好的方法是什么吗?是的,我可以。在我的解决方案中,结果仍然是ActiveRecord::Relation
,您可以在其上调用AREL方法,如where
,或应用分页。您是否可以编辑答案,以便它会说用户必须注意数组的空性,因为这将有助于使用此答案的人,并且它也适用于postgresql