是否有一个Ruby方法返回数组中最后一个删除的元素?

时间:2018-08-16 18:20:25

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-3.2

这听起来可能很奇怪,因为如果您从some_array中删除一个元素,它可能会从内存中消失。 但是在某些情况下,最好删除最后一个被删除的项目,例如当跟踪最后一个用户时,有人不关注(即从其后续数组中删除),并在视图中呈现类似“鲍勃停止跟随史密斯”的消息。我不确定用什么方法可以做到这一点,因此是一个问题。

编辑:在删除之前将项目存储在实例变量中对我没有帮助,因为实例变量仅存在于单个控制器动作中。

以下是一些使用public_activity gem的代码段:

 class User < ApplicationRecord
   # allow user to follow other users
   has_many :active_relationships, class_name:  "Relationship",
                              foreign_key: "follower_id",
                              dependent:   :destroy
  def unfollow(other_user)
    following.delete(other_user)
  end

end

class Relationship < ApplicationRecord
  include PublicActivity::Model
  tracked owner: ->(controller, model) {controller && controller.current_user}

  belongs_to :follower, class_name: "User"
  belongs_to :followed, class_name: "User"
  validates :follower_id, presence: true
  validates :followed_id, presence: true
end

class RelationshipsController < ApplicationController
  def destroy
    user = Relationship.find(params[:id]).followed
    current_user.unfollow(user)
    flash[:notice] = "You've stopped following #{user.name}"
    redirect_to users_path
  end
end

我希望我的活动/索引路径呈现_destroy部分,该部分将说用户x在用户y'之后停止,如下所示:

class ActivitiesController < ApplicationController
  def index
    @activities = PublicActivity::Activity.order("created_at desc")
  end
end 

并在视图中:

<% @activities.each do |activity| %>
  <%= link_to  activity.owner.name, activity.owner if activity.owner %>
  <%= render_activity activity %><br>
<% end %>

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我想不出删除最后一个元素并且不返回它的方法... 如果您这样做: var = ary.pop将删除最后一个元素并返回它,您可以将var保存在另一个表中或其他任何表中... 如果您想要更强大的解决方案,则可以搜索papertrail gem。