如何在演示者中使用 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 < @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?的主要内容,如果未能解决你的问题,请参考以下文章
Rails - 演示者中的 Helper Singleton 和 Rails Route Helpers
我应该以MVP模式将我的视图投射到iOS上的演示者中的UIViewController吗?