Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 在rails中的对象集合中移动一个对象_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 在rails中的对象集合中移动一个对象

Ruby on rails 在rails中的对象集合中移动一个对象,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,这里是场景,我有这些对象。假设这是一个用户: 该物体来自: @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 = User.all
用户对象

[<#User id: 1, firstname: "John", lastname: "Pond">,<#User id: 2, firstname: "Paul", lastname: "Rich">,<#User id: 3, firstname: "Jasmine", lastname: "Ong">]

我已经得到了答案。这是我所做的,使我的问题在上面的工作

@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) }
@users=User.all
user\u id=user.pull(:id)
用户标识。删除(2)
新用户标识=[2]
用户_id.each do | id|

新用户ID我们也可以这样做:

向数组中添加新方法。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>]
@users=User.all#[,]
user|id=@users.rindex{| user | user.id==2}
@users=@users.swap!(用户id)#[,]
这太难看了吗

hash = [{ id: 1}, {id: 2}, {id: 3}]
hash.unshift(hash.delete(hash.select {|h| h[:id] == 2 }.first))
=> [{:id=>2}, {:id=>1}, {:id=>3}]

您只是在交换对象。你的代码也不灵活。一个对象中只有2个。如果我有超过100个呢?你是说我修改了交换!方法?我下面的答案就足够了。你的问题是关于向上移动一个物体?如果您想要更大的灵活性,为什么不将arg
b=a-1
更改为
b
,这样我们就可以切换到我们想要的索引?不排序id,它是对象集合中的整个用户对象。是否希望在
ActiveRecord关系对象中得到结果
,或者将其转换为
数组
?我已经解决了这个问题。我把答案贴在下面。
hash = [{ id: 1}, {id: 2}, {id: 3}]
hash.unshift(hash.delete(hash.select {|h| h[:id] == 2 }.first))
=> [{:id=>2}, {:id=>1}, {:id=>3}]