2

紙の証跡がバージョン管理したオブジェクトを取得しようとしています。ただし、.reify を使用すると、以前のバージョンが取得されます。最新のものではありません。

例えば

コントローラ

@line_item_versions = PaperTrail::Version.where(item_type: 'LineItem', secondary_id: params[:id]).order('created_at ASC')

意見

<% @line_item_versions.each_with_index do |line_item, index| %>
<% object = line_item.reify(options = {}) %>
          <% if object %>
                <b><%= object.name %></b> : <%= object.quantity %>
              </font>
          <% end %>

object = line_item.last.reify(options = {})またはobject = line_item.next_version.reify(options = {})両方とも、未定義のメソッド エラーを返します。

特定の情報をやり取りして表示できるように、適切なオブジェクトを取得するにはどうすればよいですか?

4

1 に答える 1

3

これは、PaperTrail がオブジェクトを変更前の状態で保存するためです。したがって、オブジェクトを具体化すると、以前の状態が表示されます。変更後の名前を取得したい場合は、object_change 列を追加できます。バージョンテーブルに追加し、必要なオブジェクトが変更されている場合はチェンジセットを呼び出し、更新されたフィールドを出力し、そうでない場合は具体化されたオブジェクトフィールドを次のように出力します。

<%= line_item.changeset[:name].nil? object.name : line_item.changeset[:name][1] %></b> : <%= line_item.changeset[:quantity].nil? object.quantity : line_item.changeset[:quantity][1] %>
于 2014-10-13T14:26:07.807 に答える