如何在演示者中使用 Enumerable mixin?

Posted

技术标签:

【中文标题】如何在演示者中使用 Enumerable mixin?【英文标题】:How do I use the Enumerable mixin in my presenter? 【发布时间】:2015-03-09 17:36:03 【问题描述】:

我有一个演示者,我想在其中提供 each_with_index 方法。我在我的基本演示者中添加了include Enumerable,但是,我仍然收到无方法错误。我当前的代码如下:

index.erb

<% @bids.each_with_index do |bid, index| %>
  <% present bid do |bid_presenter| %>
     <div class="large-4 medium-4 columns <%= bid_presenter.last_column %>"></div>
  <% end %>
<% end %>

bid_presenter.rb

class BidPresenter < BasePresenter      
    presents :bid

    def last_column
        if index == bid.size - 1
            'end'
        end
    end
end

base_presenter.rb

class BasePresenter
  include Enumerable
    def initialize(object, template)
        @object = object
        @template = template
    end

private

    def self.presents(name)
        define_method(name) do
            @object
        end
    end

    # h method returns the template object
    def h
        @template
    end

    # if h is missing fallback to template
    def method_missing(*args, &block)
        @template.send(*args, &block)
    end
end

bids_controller.erb

  # GET /bids
  # GET /bids.json
  def index
    @bids = current_user.bids
  end

【问题讨论】:

好问题,不幸的是我不确定如何在演示者中使用each_with_index 方法。但是,您可以通过while 循环来解决它。 while i &lt; @binds.length...在循环内部,您将获得 i 的值,我将在循环结束时将 i 增加 1。 i += 1. 感谢@JustinLicata 的评论你知道我是否能够在我的bid_presenter.rb 中执行此操作吗?我已经可以在我的循环中使用上述方法来实现这一点。干杯 是的,我刚刚在演示者中对其进行了测试。话虽如此,有人可能会回答如何在您的演示者中使用each_with_index :) 谢谢@JustinLicata 您能否提供示例代码作为答案?即使它没有直接回答这个问题,它也为其他人提供了实现相同目标的替代选择。谢谢:) 想一想,我只会在演示者中使用实例方法。我会在视图中保留each_with_index 【参考方案1】:

您将所有未显式实现的方法转发到@template。无论@template 是什么,似乎都无法正确实现each。你需要让@template正确回复each

【讨论】:

感谢您的回答。关于如何实现这一目标的任何想法?

以上是关于如何在演示者中使用 Enumerable mixin?的主要内容,如果未能解决你的问题,请参考以下文章

php 404在演示者中

Rails - 演示者中的 Helper Singleton 和 Rails Route Helpers

我应该以MVP模式将我的视图投射到iOS上的演示者中的UIViewController吗?

如何在一票面试者中,脱颖而出

如何在 Enumerable.Distinct() 中使用 lambda 表达式 [重复]

如何在 C# 中使用 Enumerable 获取备用元素