1

所以执行这个会给我一个错误:

no block given (yield)

好吧,从来没有深入研究过 ruby​​ 中的块,这似乎是这里的一个问题。如果您有更好的解决方案,请提供,否则我想为这个遗留代码找到一个解决方法......

  def tab_groupings
    结果 = at_a_glance_grouping
    结果 += rating_grouping 如果 @domain_context.include_ratings 和 (controller.controller_name !='rewards_credit_cards')
    结果 += specific_tab_groupings
    结果        
  结尾

  def at_a_glance_grouping
    结果 = [[:at_a_glance, 产量]]
    product_type = controller.controller_name == 'fairfax' ? @product_type_helper[:controller]:controller.controller_name
    result[0][1].insert(0, :overall_rating) if @domain_context.include_ratings 和 (product_type !='rewards_credit_cards')
    结果
  结尾

4

1 回答 1

4

yield用于执行您传递给该方法的块,然后您对该调用的结果执行某些操作。

因此,您的方法at_a_glance_grouping希望您将一个块传递给它......然后它将在下一行(您使用的地方yield)执行

您没有at_a_glance_grouping在 的第一行传递任何块tab_groupings,因此 ruby​​ 理所当然地抱怨。

你想用 实现yield什么?

你真的需要它吗?如果没有 - 那么只需将其删除。

如果有时您确实将一个块传递给此方法,那么您需要在调用 yield 之前检查它,例如:

 result = [[:at_a_glance, yield]] if block_given?
于 2013-09-25T02:24:32.737 回答