l oop внутри Model.new в рельсах - PullRequest
0 голосов
/ 09 марта 2020

Я знаю, что это очень короткий вопрос. Я понимаю, "{}" представляет все oop. и новый оператор создает новый объект активной записи.

Что эта строка делает в рельсах? откуда берется свинец?

Proc.new{|lead| lead.lead_details.name}

1 Ответ

2 голосов
/ 09 марта 2020

Создает новый Proc объект. lead нигде в этом примере не пришло, поскольку Proc не вызывается. Но вы можете назвать это, передав, например, как блок.

leads = Lead.includes(:lead_details) # I assume it's an AR model, obviously
p = Proc.new { |lead| lead.lead_details.name }
names = leads.map(&p)

Таким образом, lead происходит из метода map и представляет отдельный элемент leads массива-подобного объекта, это эквивалентно этому:

leads.map { |lead| lead.lead_details.name }

Вы можете также вызывайте эту процедуру «вручную», передавая аргумент явно, например:

p.call(leads.first)
# => Whatever is leads.first.lead_details.name

Вы даже можете написать свой собственный метод, используя его в качестве блока, например:

def first_do(collection)
  yield(collection.first)
end
first_do(leads, &p)
# => Whatever is leads.first.lead_details.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...