这是场景,我有这些对象。我们假设这是一个User
:
对象来自:
@user = User.all
用户对象
[<#User id: 1, firstname: "John", lastname: "Pond">,<#User id: 2, firstname: "Paul", lastname: "Rich">,<#User id: 3, firstname: "Jasmine", lastname: "Ong">]
如何移动一个对象,例如我想移动User.id == 2
?我想要的结果如下所示。
[<#User id: 2, firstname: "Paul", lastname: "Rich">,<#User id: 1, firstname: "John", lastname: "Pond">,<#User id: 3, firstname: "Jasmine", lastname: "Ong">]
答案 0 :(得分:1)
我已经得到了答案。以下是我提出的上述问题。
@users = User.all
user_ids = User.pluck(:id)
user_ids.delete(2)
new_user_ids = [2]
user_ids.each do |id|
new_user_ids << id
end
@users.sort_by { |user| new_user_ids.index(user.id) }
这完美了!
答案 1 :(得分:-1)
我们也可以这样做:
向Array添加新方法。 LIB / rails_extensions.rb
class Array
def swap!(a, b = a - 1)
self[a], self[b] = self[b], self[a]
self
end
end
然后在config / environment.rb中添加它
require 'rails_extensions'
因此我们可以将方法swap!
用于数组,它会将对象与之前的对象交换。我们可以这样做:
@users = User.all #[<#User id: 1>, <#User id: 2>]
user_id = @users.rindex {|user| user.id == 2}
@users = @users.swap!(user_id) #[<#User id: 2>, <#User id: 1>]
答案 2 :(得分:-1)
这太难看了吗?
hash = [{ id: 1}, {id: 2}, {id: 3}]
hash.unshift(hash.delete(hash.select {|h| h[:id] == 2 }.first))
=> [{:id=>2}, {:id=>1}, {:id=>3}]