【问题标题】:Using partial with paper trail使用带纸迹的部分
【发布时间】:2014-03-18 16:47:20
【问题描述】:

我正在尝试将一些代码放在 /events 中我的显示页面的部分内容中。当我在我的显示页面中使用它时,代码工作正常,但是当我将它提取到部分时,我得到一个无方法错误

undefined method `event' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_PaperTrail_Version:0x007f4368823a68>

versions/_version.html.erb

<% cache version do %>
  <div class="feed-item">
    <h4>
      <%= link_to version.item.name, version.item %> 
      <small>
      <%= version.event + "d" %> by <%= link_to User.find(version.whodunnit).username, User.find(version.whodunnit) %>
      </small>
    </h4>

    <ul class="list-unstyled">
      <% version.changeset.each do |data| %>
        <li>
          <strong><%= data[0].capitalize %>:</strong> 
          <% if data[1][0].present? %><p class="red">- <%= data[1][0] %></p><% end %> 
           <p class="green">+ <%= data[1][1] %></p>
        </li>
      <% end %>
    </ul>
  </div>
<% end %>

show.html.erb

<%= render :partial => '/versions/version', :object => @versions %>

事件控制器

  def show
    @versions = @event.versions
  end

事件模型

has_paper_trail

知道如何将我的代码放在部分而不是放在我的显示视图中吗?谢谢。

编辑: 我仍然收到无方法错误

undefined method `item' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_PaperTrail_Version:0x007f43688ee1a0>

events_controller.rb

before_action :set_event, only: [:show, :update, :destroy]

def set_event
  @event = Event.find(params[:id])
end

【问题讨论】:

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


    【解决方案1】:

    您是否在事件控制器中定义了@event变量? @event.versions 方法必须在实际事件对象上调用。

    例如

    def show
      @event = Event.find(1)
      @versions = @event.versions
    end
    

    【讨论】:

    • 我正在使用 rails 4,使用 set_event 方法。但是我在使用我的部分时仍然收到“无方法错误”。
    • 您的show 方法看起来像这样吗?你能在控制器方法中Rails.logger.debug @versions 看看你是否真的有你的活动的版本吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    相关资源
    最近更新 更多