在我的验证中更快地产生 "Calling argumentless methods within blocks is slower than using symbol to proc"。如何解决?
Fasterer yields "Calling argumentless methods within blocks is slower than using symbol to proc" within my validations. How to solve it?
我正在编写自己的 ERP。对于 People
(模型 class),我有以下验证:
class People < ApplicationRecord
# some code for N:M relations
# validations
validates :aka, presence: { if: proc { |person| person.aka? } },
uniqueness: true,
length: { within: 3..25,
if: proc { |person| person.aka? } }
validates :last_name, presence: { if: proc { |person| person.last_name? } },
uniqueness: { scope: %i[last_name first_name] },
length: { within: 2..100,
if: proc { |person| person.last_name? } }
validates :phone_ext, presence: { if: proc { |person| person.phone_ext? } },
length: { within: 1..10,
if: proc { |person| person.phone_ext? } },
format: { with: /\A\d{1,10}\Z/i,
if: proc { |person| person.phone_ext? } }
validates :first_name, presence: true,
uniqueness: { scope: %i[last_name first_name] },
length: { within: 2..100 }
end
正如您在所有 if: proc { ....
行中看到的,它们几乎是相同的东西。 fasterer 知道这一点,这就是为什么我得到 在块内调用无参数方法比使用符号来处理 消息慢。
现在,一整天都没有成功,我整天都在想办法解决这个 Fasterer 的消息。 lambdas, 闭包, &:, -> 都试过了,放弃了
有什么想法吗?
这是指,例如,a.map(&:foo)
比 a.map { |o| o.foo }
快。
在此上下文中,validates
将以方法名称作为符号进行检查。例如,if: :aka?
而不是 if: proc { |person| person.aka? }
我正在编写自己的 ERP。对于 People
(模型 class),我有以下验证:
class People < ApplicationRecord
# some code for N:M relations
# validations
validates :aka, presence: { if: proc { |person| person.aka? } },
uniqueness: true,
length: { within: 3..25,
if: proc { |person| person.aka? } }
validates :last_name, presence: { if: proc { |person| person.last_name? } },
uniqueness: { scope: %i[last_name first_name] },
length: { within: 2..100,
if: proc { |person| person.last_name? } }
validates :phone_ext, presence: { if: proc { |person| person.phone_ext? } },
length: { within: 1..10,
if: proc { |person| person.phone_ext? } },
format: { with: /\A\d{1,10}\Z/i,
if: proc { |person| person.phone_ext? } }
validates :first_name, presence: true,
uniqueness: { scope: %i[last_name first_name] },
length: { within: 2..100 }
end
正如您在所有 if: proc { ....
行中看到的,它们几乎是相同的东西。 fasterer 知道这一点,这就是为什么我得到 在块内调用无参数方法比使用符号来处理 消息慢。
现在,一整天都没有成功,我整天都在想办法解决这个 Fasterer 的消息。 lambdas, 闭包, &:, -> 都试过了,放弃了
有什么想法吗?
这是指,例如,a.map(&:foo)
比 a.map { |o| o.foo }
快。
在此上下文中,validates
将以方法名称作为符号进行检查。例如,if: :aka?
而不是 if: proc { |person| person.aka? }