Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 是否有一个Ruby方法返回数组中最后删除的元素?_Ruby On Rails_Ruby_Ruby On Rails 4_Ruby On Rails 3.2 - Fatal编程技术网

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

Ruby on rails 是否有一个Ruby方法返回数组中最后删除的元素?,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 3.2,这听起来可能有点奇怪,因为如果从某个数组中删除某个元素,它可能会从内存中消失。 但在某些情况下,最好获取最后一个被删除的项目,例如,当跟踪最后一个未跟踪的用户时(即从其后续数组中删除),并在视图中呈现类似“Bob已停止跟踪Smith”的消息。我不确定什么方法可以实现这一点,因此问题就来了 编辑:我认为在删除之前将项目存储在实例变量中不会有帮助,因为实例变量只存在于单个控制器操作中 以下是使用公共_活动gem的一些代码片段: class User < ApplicationRecord

这听起来可能有点奇怪,因为如果从某个数组中删除某个元素,它可能会从内存中消失。 但在某些情况下,最好获取最后一个被删除的项目,例如,当跟踪最后一个未跟踪的用户时(即从其后续数组中删除),并在视图中呈现类似“Bob已停止跟踪Smith”的消息。我不确定什么方法可以实现这一点,因此问题就来了

编辑:我认为在删除之前将项目存储在实例变量中不会有帮助,因为实例变量只存在于单个控制器操作中

以下是使用公共_活动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
class用户(控制器,模型){controller&&controller.current_user}
属于:追随者,类别名称:“用户”
属于:后接类别名称:“用户”
验证:follower_id,状态:true
验证:id,状态:true
终止
类关系控制器<应用程序控制器
def销毁
user=Relationship.find(params[:id])。后跟
当前用户。取消跟踪(用户)
flash[:notice]=“您已停止跟踪#{user.name}”
将\u重定向到用户\u路径
终止
终止
我希望我的活动/索引路径呈现一个_destroypartial,表示用户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 %>



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

听起来你想要一个审计gem

试用


与其删除用户,不如尝试使用布尔字段true或false来跟踪和取消跟踪跟踪跟踪跟踪跟踪用户?能否分享一个说明您的场景的代码示例?如果两个取消跟踪快速连续发生,会发生什么情况?我认为跟踪删除后发生的事情是个坏主意。你应该抓住删除的时机,在删除发生之前做正确的事情。你想跨请求“返回数组中最后一个删除的元素”?正如@Gabbar所建议的,下面的软删除似乎是一种方法。您可以使用类似的内容(或者将其用作您自己实现的指南)。