PORO主持人打破了网址助手

时间:2014-11-14 08:16:05

标签: ruby-on-rails ruby mvp

我已经开始使用PORO方法创建我的rails演示者。示例演示者驻留在app/presenters/band_presenter.rb中,这是代码:

class BandPresenter
  def method_missing(m, *args, &block)
    @band.send(m)
  end

  def initialize(band)
    @band = band
  end

  def thumb_url(size = :large_s)
    @band.images[size.to_s] if @band.images
  end
end

它运作良好。但是,如果我在rails url helper方法中使用该演示者的实例,则会破坏它们。例如:

@band = Band.find(1)
= link_to @band.name, band
# => /bands/1

@band = @band.find(1)
@band = BandPresenter.new(@band)
= link_to @band.name, band
# => /%23%3CBandPresenter:0x007f9139c50db0%3E/1

这似乎完全合法。我的问题是 - 我可以以某种方式让我的主持人支持使用网址助手吗?

1 个答案:

答案 0 :(得分:1)

尝试定义to_param方法

class BandPresenter
  def to_param
    @band.id
  end

  def model_name
    @band.model_name
  end
end

另一个可能有用的选项是定义respond_to_missing?,请参阅此处:http://robots.thoughtbot.com/always-define-respond-to-missing-when-overriding

class BandPresenter
  def respond_to_missing?(method_name, include_private = false)
    @band.respond_to?(method_name, include_private) || super
  end
end