首页 > 解决方案 > 将变量传递给方法 info_for_paper_trail

问题描述

在表版本中,我创建了新列 'localip' 。在视图中,我有通过 JS 放置价值的隐藏字段:

<%= f.hidden_field :localIP, :value => params[:localIP] %>

如果我理解正确,则首先调用 paper_trail,因此我将其放入控制器中:

  prepend_before_action :set_localip, only: :update   

  def info_for_paper_trail
     { 
       :ip => request.remote_ip, 
       :agent => request.user_agent,
       :localip => @localip
      }
  end

private
    def set_localip
       @localip = params[:localIP] 
    end

但在更新期间:localip 未通过:

PaperTrail::Version Create (0.3ms) INSERT INTO "versions" ("item_type", "item_id", "event", "whodunnit", "object", "created_at", "object_changes", "ip", "agent") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)

有人知道如何传递这样的价值吗?

标签: ruby-on-rails-5paper-trail-gem

解决方案


解决了:

在控制器中:

  prepend_before_action :set_localip, only: :update   
  before_action :set_paper_trail_whodunnit, if: :user_signed_in?

  def info_for_paper_trail
     { 
       :ip => request.remote_ip, 
       :agent => request.user_agent,
       :localip => @localip
      }
  end#

private
    def set_localip
       @localip = params.require(:commission)[:localIP]
    end

/config/initializers/paper_trail.rb

module PaperTrail
  class Version < ::ActiveRecord::Base
     belongs_to :user, foreign_key: :whodunnit
  end
end

推荐阅读