Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 首先显示具有特定ID的记录_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

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