2013-09-25 54 views
1

所以執行這個給我回一個錯誤:沒有給出塊產量

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 

回答

3

yield用來執行你傳遞給方法的塊,然後你做些什麼與該呼叫的結果。因此

你的方法at_a_glance_grouping希望你傳遞給它一個塊......它將然後在下面的行執行(如果你使用yield

你沒有在第一傳遞任何塊at_a_glance_groupingtab_groupings,因此紅寶石正確地抱怨。

你想用yield實現什麼?

你真的需要它嗎? 如果沒有 - 那就把它刪除。

如果有時你塊通過這種方法,那麼你需要調用產量如前檢查是:

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