没有给定产量的块

时间:2013-09-25 02:20:38

标签: ruby-on-rails ruby block

因此执行此操作会给我一个错误:

no block given (yield)

从来没有深入研究红宝石中的积木,这似乎是一个问题。如果您有更好的解决方案请提供商,否则我想找到这个遗留代码的解决方法......


  def tab_groupings
    result = at_a_glance_grouping
    result += rating_grouping if @domain_context.include_ratings and (controller.controller_name !='rewards_credit_cards')
    result += specific_tab_groupings
    result        
  end

  def at_a_glance_grouping
    result = [[:at_a_glance, yield]]
    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 and (product_type !='rewards_credit_cards')
    result
  end

1 个答案:

答案 0 :(得分:3)

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

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

你没有在at_a_glance_grouping的第一行向tab_groupings传递任何阻止,因此ruby正当地抱怨。

您希望通过yield实现什么目标?

你真的需要它吗? 如果没有 - 那么就把它删除。

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

 result = [[:at_a_glance, yield]] if block_given?