活動記錄中是否可以使用.where
將方法作爲參數?方法作爲ActiveRecord中的每個實例的參數`where'
def not_foo?
name != "foo"
end
下面的代碼無法正常工作,但你會明白我的意思:
array.where(|element| element.not_foo?).count
活動記錄中是否可以使用.where
將方法作爲參數?方法作爲ActiveRecord中的每個實例的參數`where'
def not_foo?
name != "foo"
end
下面的代碼無法正常工作,但你會明白我的意思:
array.where(|element| element.not_foo?).count
可以在Active紀錄。凡採取的方法作爲參數?
Ans:不,它不能。可能你想這樣做
array.where.not(name: 'foo').count
你在這裏混合幾種不同的概念。
在Ruby中不能像在C或其他語言中那樣「傳遞方法作爲參數」。你可以通過一個block
作爲參數,這是非常不同。
在您的示例中,element.not_foo?
將首先被評估。您將該評估的結果傳遞給where
。有,但是,在你的代碼中的一些問題,這將阻止它甚至跑步:
的not_foo?
定義接收參數(def nor_foo?(v)
),但你沒有通過,這將引發一個ArgumentError: wrong number of arguments (0 for 1)
例外。
您正在錯誤地使用塊參數語法(|element|
)。無論如何,ActiveRecord的where
不接受一個塊。
將方法作爲參數傳遞,即功能範例。在Ruby中通過closures
實現。
Closures
可以在Ruby中通過blocks
,lambdas
,procs
實現。
我編輯了我的原始問題以刪除(v)。第二部分我保持不變,因爲我不知道如何使它正確,因爲ActiveRecord並沒有將方法作爲參數 – singularity