Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 4 x paper_trail:跟踪更新的属性并显示其新值_Ruby On Rails_Ruby On Rails 4_Versioning_Records_Paper Trail Gem - Fatal编程技术网

Ruby on rails Rails 4 x paper_trail:跟踪更新的属性并显示其新值

Ruby on rails Rails 4 x paper_trail:跟踪更新的属性并显示其新值,ruby-on-rails,ruby-on-rails-4,versioning,records,paper-trail-gem,Ruby On Rails,Ruby On Rails 4,Versioning,Records,Paper Trail Gem,在我的Rails 4应用程序中,我使用跟踪用户在Post模型记录上所做的更改: # post.rb has_paper_trail :on => [:update, :destroy] post属于Acalendar,而calendar有许多post,因此我在calendar索引视图中的仪表板中显示对post所做的更改: <div id="my_changes"> <% if @versions.any? %> <% @versions.

在我的Rails 4应用程序中,我使用跟踪用户在
Post
模型记录上所做的更改:

# post.rb
has_paper_trail :on => [:update, :destroy]
post
属于
A
calendar
,而
calendar
有许多
post
,因此我在
calendar
索引
视图中的仪表板中显示对post所做的更改:

<div id="my_changes">

  <% if @versions.any? %>

      <% @versions.each do |version| %>

      <% version.reify ? post = version.reify : post = Post.find_by_id(version.item_id) %>

      <p>
        <strong>
        <% if version.whodunnit.to_i === current_user.id %>
          You
        <% else %>
          <%= User.find_by_id(version.whodunnit).first_name %>
          <% end %>
        </strong> <%= conjugate(version.event) %> the post "<%= post.subject %>" in the <em><%= link_to Calendar.find_by_id(post.calendar_id).name, calendar_path(id: post.calendar_id) %></em> calendar <span id="update_time_ago">— <%= time_ago_in_words(version.created_at) %> ago.</span></p>

      <% end %>

  <% else %>

    <p>
      <span class="glyphicon glyphicon-hand-up" aria-hidden="true"></span><br/>There is no change to your posts yet.<br/>
      As soon as you update your calendar, a history of your changes will appear here.          
    </p>

  <% end %>

</div>
但是,我如何才能从中提取我感兴趣的信息,例如:仅更新的属性及其新值,而不是
updated\u at
属性,我不能
忽略
,因为我仍然想知道帖子何时更新

-----

更新3:在中,@Maysam建议:

启用此行为后,可以相当简单地获得
object.versions.map{| v |[v.created_at,v.changeset]}
然后 迭代该结构以呈现更改日志

我不确定我是否理解如何在我的案例中迭代该结构:有什么建议吗

-----

我真的可以通过书面记录来实现吗

。。我想。。展示。。已更新帖子的哪个属性及其值

根据以下文件:

。。要区分相邻版本。。将
对象\u changes
文本列添加到
版本表中。。PaperTrail将存储不同的更改。。在每个更新版本中。您可以使用
version.changeset
方法来检索它

所以,一旦你这样做了,试着添加

= debug post.versions.last.changeset

同意你的观点。之后,在ruby中,您应该可以开始了。

请尽量缩短这个问题,以便对其他人更有用。谢谢我很乐意这样做,但要在长度上找到合适的平衡并不容易,因为当我尝试发布简短的问题时,经常会要求我提供更多的代码。谢谢。这就是我现在的处境。我试图找出一种方法来处理用户编辑一个属性、多个属性等不同场景。
= debug post.versions.last.changeset