2016-03-03 140 views

回答

3

可以在Active紀錄。凡採取的方法作爲參數?

Ans:不,它不能。可能你想這樣做

array.where.not(name: 'foo').count 
1

你在這裏混合幾種不同的概念。

在Ruby中不能像在C或其他語言中那樣「傳遞方法作爲參數」。你可以通過一個block作爲參數,這是非常不同

在您的示例中,element.not_foo?將首先被評估。您將該評估的結果傳遞給where。有,但是,在你的代碼中的一些問題,這將阻止它甚至跑步:

  • not_foo?定義接收參數(def nor_foo?(v)),但你沒有通過,這將引發一個ArgumentError: wrong number of arguments (0 for 1)例外。

  • 您正在錯誤地使用塊參數語法(|element|)。無論如何,ActiveRecord的where不接受一個塊。

+0

我編輯了我的原始問題以刪除(v)。第二部分我保持不變,因爲我不知道如何使它正確,因爲ActiveRecord並沒有將方法作爲參數 – singularity

2

將方法作爲參數傳遞,即功能範例。在Ruby中通過closures實現。

Closures可以在Ruby中通過blocks,lambdas,procs實現。

相關問題