Задать вопрос
@DarthGelum
Just code it

Как узнать параметы следующего метода в цепочке?

class A
  def method1
    self
  end
  def method2(value)
    value
  end
end

Каким образом можно сделать так чтобы при вызове
p A.method1
выводилось, допустим 100, а при вызове
p A.method1.method2(10)
только 10?

Например, если это выгрузка записей из бд, при обращении к method1 получить все записи, а к method2 только 10, не выгружая остальных?
  • Вопрос задан
  • 229 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
evgenykungurov
@evgenykungurov
Программист Ruby/Rails/Системный администратор
Ваш пример, во-первых не работает, т.к. методы вы сделали не классовыми(нужно self.method), во вторых второй метод будет срабатывать к значению, который вернет первый метод, допустим это будет число, тогда второй метод будет срабатывать к классу Integer, и выйдет ошибка нет такого метода2 для класса Integer. Выход использовать технику monkey patching. Не думаю, что это хорошая идея для вашего примера, т.к то, что вы хочете уже реализовано в Active Record, что мешает вам сделать например так User.first(10) например, можно и по другому . Просто научитесь правилтно составлять запросы в гугл, поверьте там все есть по вашей теме
Ответ написан
viktorvsk
@viktorvsk
AR (собственно, в данном случае, гем Arel) формирует SQL, который уже и будет отдан базе. А 100 или 10 объектов будет возвращено уже зависит от сформированного запроса.
То, что вы предлагаете реализовать бессмысленно.
Хотя и возможно. Просто при вызове каждого метода нужно сохранять его значение в переменной инстанса, например. Нет (по крайней мере, никто не использует) каких-либо "цепочек вызова предыдущих методов на уровне Ruby".
И, кстати, то, что вы описали, больше подходит под Aspect Oriented Programming
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
18 дек. 2024, в 12:39
1000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект
18 дек. 2024, в 12:22
5000 руб./за проект