Pull to refresh
-1
0
Иван Ташкинов@prime

User

Send message

За какие суммы зарплаты вся эта борьба? Соискателю пожелание найти нормальную валютную удалёнку. А если уж ввязался в славянскую IT-галеру (даже уровня Яндекса, при всём уважении к былому величию), то к эйчару советую относиться сдержанно и без пиитета. Про диджеев говорят: "не делайте культа из работников пульта". Так и эйчар — он существует ("и ни в зуб ногой"), не мешайте ему существовать и ощущать себя полезным, но сведите его вовлечённость в ваш кейс к минимуму. Я вот эйчарам говорю, что у меня нет CV (это правда, мне лень его обновлять, в последний раз оно у меня было в актуальной форме в 2006 году, для рынка США), но говорю это вежливо. И никто мне не пишет: "как так нет CV?!". Все всё понимают, когда выёживаться, когда не выёживаться. Это как с русофобами — мой товарищ полгода говорил в Тбилиси на ломаном английском, пока я не приехал и не стал со всеми говорить на русском, и все всё прекрасно понимают и отвечают (но товарищ жалуется, что в одном учреждении, которое мы оба посещаем, со мной все говорят по-русски, а с ним по-прежнему нет, лол). 😄 Короче, совет мышкам стать ёжиками и вежливо бортануть эйчаров. Не эйчары тут решают, когда true seniors решают почтить галеру своим присутствием. ☝️

Определяется по итогам календарного года.

Скорее всего, оскорбления писать нельзя, поэтому выражу свою мысль литературно. Мысль проста: нахожу эстетическое чувство автора примитивным и извращённым, проект не стоит выеденного яйца, автор халтурщик и тунеядец, раз не сподобился осуществить намеченное (повторюсь, намеченное априори неверно, на мой субъективный взгляд) на достаточно качественном уровне, превратив English в рунглиш — Саймон Ченг точно не одобрил бы.

Можно мне тоже в личку, где покупали нищеVPSки? Спасибо.
Опередил. )) Я чуть ниже подробнее написал — наверняка кто-то из читателей (не автор статьи) ещё не очень хорошо умеет читать код Rails.
Чёткое осознание подвело. Выборки происходят — можно включить log level :info (0) и убедиться. А можно почитать код.

ActiveRecord::Relation:
# ...
include FinderMethods, Calculations, SpawnMethods, QueryMethods, Batches, Explain, Delegation
# ...
def to_a
  load
  @records
end


Очевидно, #to_a осуществляет овеществление relation'а. Смотрим дальше модуль Delegation.

ActiveRecord::Delegation:
delegate :to_xml, :to_yaml, :length, :collect, :map, :each, :all?, :include?, :to_ary, :join, to: :to_a


Уже всё понятно, наверное (насчёт #map, #each, #collect и по аналогии далее)… Тем не менее, на всякий случай найдём прямые доказательства для #find из примера.

def array_delegable?(method)
  Array.method_defined?(method) && BLACKLISTED_ARRAY_METHODS.exclude?(method)
end

def method_missing(method, *args, &block)
  if @klass.respond_to?(method)
    scoping { @klass.public_send(method, *args, &block) }
  elsif array_delegable?(method)
    to_a.public_send(method, *args, &block)
  elsif arel.respond_to?(method)
    arel.public_send(method, *args, &block)
  else
    super
  end
end


Исходя из предположения, что метод Product::find не определён ("klass.respond_to?(method)" ложно), попадаем в ветку «elsif array_delegable?(method)». Метод #find определён для Array и не входит в BLACKLISTED_ARRAY_METHODS:

BLACKLISTED_ARRAY_METHODS = [
  :compact!, :flatten!, :reject!, :reverse!, :rotate!, :map!,
  :shuffle!, :slice!, :sort!, :sort_by!, :delete_if,
  :keep_if, :pop, :shift, :delete_at, :compact, :select!
].to_set


В результате вызов #to_a, который для Product.all будет осуществлён через запрос «SELECT 'products'.* FROM 'products'».

П.С. Призываю всех не верить мне на слово, не верить моей интерпретации кода ActiveRecord::Relation и ActiveRecord::Delegation, а проверить самостоятельно и убедиться на практике. :-)
Иными словами, пример будет работать одинаково и в Rails 3, и в Rails 4, и «Примечание» действительности не соотвутствует. Методы Enumerable потребуют овеществления relation в любом случае.
С какого перепугу в Rails 4 будет «множество выборок с 'LIMIT 1'»?? = ) При вызове #find будет предварительно вызван метод #to_a для relation Product.all, что неизбежно приведёт к «SELECT * FROM products».
В Rails 4 all≡scoped и прострелить конечность так просто не получится, разве что вместо all вызвать to_a, но это совсем тяжёлый случай.


Вопрос на засыпку для автора статьи (для Rails 4): в Вашем же примере
Product.all.find{|p| p.id == 42}
метод #find делегируется к какому классу?? Ага. А как Вы думаете, каким образом к этому классу будет преобразовано relation Product.all? ;-)
Выражение эмоции приоритетно перед описанием текущей ситуации и собственных действий (взять хотя бы размеры надписей «Я чувствую» и «Потому что»)?!?! This is ridiculous.
Присоединяюсь, вышлите ссылку в личку, пожалуйста. Успех довольно редкий.
Открыть ЗАО стоит дороже. Процедура выхода из ООО должна быть прописана в Уставе ООО. Обычно выйти можно в любую секунду, а вот долю забрать — несколько позже (например, через 3-6 месяцев).

Information

Rating
Does not participate
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity