2013-04-15 149 views
0

如何解決此錯誤?我想幹我的控制器,並且在每種方法中,我都會對params []進行完整性檢查,只是確保所有參數都存在。使用Rails中的lambda控制器的操作返回控制

問題在於lambda的返回。當它被定義

def validate_input(parameters) 
    return proc { 
     if parameters.find_index { |i| i.nil? } 
      error_message = {'Error' => 'Please fix some params'}.to_json 
      render :json => error_message and return 
     end 
    } 
    end 

然後,我的控制器動作裏面我做的:

def action 
    ... 
    validate_input([my_sane_id, my_other_param]).call 
    ... 
end 

並且得到錯誤:意想不到的回報。

+1

你是否有跡象表明哪一行出現意外收益?我的直覺是你可能不需要它:'render:json => error_message並返回'由於隱式返回。 –

+0

但這正是我想要做的:驗證之後,從調用方法返回。嗯。想了一下後,我看到你在說什麼。將盡快檢查。 – valk

+1

我只是認爲看到你使用了'proc' - 我知道在某些版本的Ruby中'proc'和'lambda'是可以互換的,但是'Proc'和'Lambda'在返回時表現不同。 http://innig.net/software/ruby/closures-in-ruby我認爲這是我正在考慮的文章。 –

回答

2
def validate_input(*parameters) 
    if parameters.any?(&:nil?) 
    render :json => { :error => 'Please fix some params' } 
    false 
    else 
    true 
    end 
end 


def action 
    ... 
    return unless validate_input(my_sane_id, my_other_param) 
    ... 
end 
  1. 你可以使用圖示符(「*」)來獲取未知數量的參數到數組

  2. 你可以使用(「沒有?」)方法,而不是指數(這是位置)

  3. 您可以使用符號PROC(「&」)如果你只讓函數調用中的每一項陣列

  4. 你不需要調用to_json如果渲染JSON

  5. 更好地利用符號作爲哈希鍵(「:錯誤」)

  6. 你返回true/false,表示如果一切OK,如果它的虛假,剛剛返回該行動

+0

謝謝,但無論如何,我很想知道如何使用它與proc,因爲這是該語言的功能。 – valk

相關問題