@rubyschool

Страница 570 из 921
Roman
16.03.2018
19:56:29
методы в AR, типа where, find тоже методы класса. Если тебе нужно совершить какое-то действие с несколькими объектами, то можно использовать метод класса

Alex
16.03.2018
19:57:01
это понятно)

просто я литературу почитал и у меня как-то не созрел в голове кейс на практическое применение, только кейс на тему что это

Roman
16.03.2018
19:58:25
или ты пишешь какой-нибудь апи клиент, который делает запросы на другой сервер, то это можно упаковать в виде методов класса типа Api.get_something

Google
Alexander
16.03.2018
19:59:40
форум Ромы жив?

Alex
16.03.2018
20:00:09
" Если тебе нужно совершить какое-то действие с несколькими объектами, то можно использовать метод класса" а можно пример?

Vladimir
16.03.2018
20:01:54
форум Ромы жив?
жив только Рома, жив ГитХаб, живы Видосы с курса. А... ещё и #Ruby жив!

Roman
16.03.2018
20:01:59
ну в той же рельсе можно упаковать в модель какой-нибудь метод с нотификацией всех юзеров (хотя это не очень хорошо) типа User.notify_all

Alex
16.03.2018
20:02:52
наверно я пока не готов это понять

т.е. я создаю метод класса, который добавляет нужный метод к объекту?

Roman
16.03.2018
20:05:05
нет, зачем, это такой же метод, как для обычного объекта

Alex
16.03.2018
20:05:18
тогда я не понимаю в чем прикол

я не понял саму фразу ''упаковать в модель метод"

Roman
16.03.2018
20:06:45
если копнуть глубже, то по факту методы класса - это синглтон методы, которые принадлежат одному объекту класса, так как в руби все - объект

я не понял саму фразу ''упаковать в модель метод"
ну добавить, просто так выразился

Alex
16.03.2018
20:07:41
метод класса добовляет метод к классу User

А некрасиво это, потому что фиг отследишь

Google
Roman
16.03.2018
20:09:01
это будет что-то типа def self.notify_all User.all.pluck(:email).each {|email| UserMailer.email(email).deliver_later} end

метод класса добовляет метод к классу User
не совсем, я описал выше, как это работает

Alex
16.03.2018
20:10:20
выходит применив этот метод я разошлю почту всем объектам класса user?

про синглтон методы я ещё ничего не знаю к сожалению

Roman
16.03.2018
20:10:55
ну не объектам, достанешь из бд все адреса и разошлешь

Alex
16.03.2018
20:11:10
ну да, это и имелось ввиду

почему это не очень хорошо?

Roman
16.03.2018
20:12:36
потому что лишняя логика в модели, а это не соответствует solid

Alex
16.03.2018
20:13:00
дейсвительно, я мог и догодаться

в таком клуче этот метод и не нужен вовсе

Roman
16.03.2018
20:14:07
ну это как пример

Alex
16.03.2018
20:14:22
да, я понял) спасибо что объяснили

Roman
16.03.2018
20:14:28
если правильно, то делаешь отдельный объект, который будет за это отвечать

Alex
16.03.2018
20:15:17
в сдучае rails - хелпер ?

Roman
16.03.2018
20:15:48
не, хэлперы - это для вьюх

просто какой-нибудь класс типа UserNotifier, в котором будет инкапсулирована вся логика для уведомлений пользователей

Alex
16.03.2018
20:17:17
я вроде читал что для моделей свои хелперы есть

Roman
16.03.2018
20:17:29
в котором методы кстати вполне могут быть только методами класса

Alex
16.03.2018
20:17:34
наверно я уже ошибаюсь в своих воспоминаниях

хм, потому что объекты этого класса не нужны

Google
Roman
16.03.2018
20:18:07
типа того

Alex
16.03.2018
20:18:17
а альтернатива есть ?

Roman
16.03.2018
20:18:48
альтернатива чему?

Alex
16.03.2018
20:19:24
созданию класса с методами класса

в ключе конкретно этой задачи

Roman
16.03.2018
20:21:05
ну могут быть и только методы экземпляров, или и то и другое, это уже смотреть надо на конкретные кейсы

Alex
16.03.2018
20:21:22
Roman
16.03.2018
20:21:58
Alex
16.03.2018
20:22:38
ну т.е. это не предусмотрено в rails в виде уже готовой папки

Roman
16.03.2018
20:22:52
нет)

Alex
16.03.2018
20:23:24
надо будет перечитать все таки ту главу в книжке

Спасибо за разъяснения)

Roman
16.03.2018
20:24:10
ну это все постигается в первый год работы, так что чем быстрее устроишься, тем лучше

Alex
16.03.2018
20:26:04
кейс звучит так, они нужно когда нужно сделать удобный способ создавать объекты, а так же когда создавать объекты не нужно, своеобразный модуль только без ''подмешивания" методов к существующим классам

Roman
16.03.2018
20:27:03
ты все усложняешь, когда пишешь ты мало об этом думаешь, просто видишь, что тут тебе нужен всегда один и тот же объект, то делаешь методы класса

Alex
16.03.2018
20:31:28
кажется теперь я осознал практическое применение

просто можно же применять не только для своих классов, но и для создания методов к базовым классам, если это нужно

Ro
17.03.2018
04:50:11
смотря что значит расширять

если это значит monkey patching, то это плохо

Google
Ro
17.03.2018
04:50:31
наследование - so so

композиция - можно свободно использовать

например, есть класс EncryptedString < String - это наследование

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

правда в руби есть киворд extend - он путает понятие "расширение", так что я понимаю это как "улучшение функциональности"

хотя, к слову, многие gem'ы не стесняются monkey patch'ить базовые классы рубей и rails

Andrey
17.03.2018
05:56:16
Ну вот когда новые методы в базовые классы добавляют гемы это ок для меня. method_missing и прочая магия в гемах тоже ок. Но сам такого делать не буду.

Я просто смотрю какие то вещи на SO там в ответах прямо не стесняются патчить базовые классы.

Alex
17.03.2018
07:33:09
Что значит композиция?

композиция - можно свободно использовать

Admin
ERROR: S client not available

Alex
17.03.2018
07:54:19
ну к примеру так использовать вполне можно? class String def self.lipsum "Lorem ipsum dolor sit amet, consectetur adipiscing elit." end end

Alex
17.03.2018
09:03:14
это манкей патч

Alex
17.03.2018
09:04:05
вы иметее ввиду пример кода который я скинул?

Alex
17.03.2018
09:04:46
Именно

Alex
17.03.2018
09:05:22
а что есть композиция ?

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

Roman
17.03.2018
09:10:09
Композиция - такой подход, альтернатива наследованию. Гуглится все кстати очень просто

Alex
17.03.2018
09:10:29
да я гуглил честное слово

первое что мне пришло в голову что это аналог наследования у двух классов, которое в руби не поддерживается

Google
Alex
17.03.2018
17:57:27
Не могу разобраться, у меня есть метод find_all и есть объект метод класс к которому выдает мне что это массив. Так вот когда я попытался найти через команду methods? или на ruby-doc такой метод в разделе Array, мне это сделать не удалось, но метод то работает когда я его использую с этим объектом

я нашел этот метод в итоге в Enumerable на ruby-doc, но почему все таки methods? мне не выдло что я могу использовтаь этот метод?

Andrey
17.03.2018
19:25:15
Что за метод? Может он через method_missing работает.

Alex
17.03.2018
19:26:08
find_all

Andrey
17.03.2018
19:27:37
Делает то он что? :)

ага это тоже что и select

Alex
17.03.2018
19:29:38
relevant_lines = lines.find_all { |line| line.include?('Truncated') } пример, lines массив со строками, он находит элементы массива в котором есть строка Truncated и возвращает эту ячейку

ага это тоже что и select
нет, селект возвразает только то что совпадает искомому

а find_all то что включает внутри ячейки искомое

там в ячейке может быть строка Lorem ipsum Truncated

он вернет всю ячейку со строкой внутри

я пока даже и не нашел объяснения раздела Enumerable, но понял что найду свой ответ где-то в нем

Andrey
17.03.2018
19:36:09
find_all → an_enumerator Returns an array containing all elements of enumfor which the given block returns a true value. select { |obj| block } → arrayclick to toggle source select → an_enumerator Returns an array containing all elements of enumfor which the given block returns a true value.

Тоже самое :)

Salavat
17.03.2018
19:36:45
а можно ли реализовать связь многие ко многим без использования третей таблицы?

Andrey
17.03.2018
19:37:12
Нет конечно

Alex
17.03.2018
19:37:22
Можно но не нужно

Andrey
17.03.2018
19:37:38
Не можно никак

Salavat
17.03.2018
19:38:01
тоесть нужно делать 3 таблицу и делать через has_many through

Alex
17.03.2018
19:38:06
да можно, просто производительность на самую мелкую операцию будет ниже плинтуса

Alex
17.03.2018
19:38:36
ну хорошо нельзя, но это возможно сделать

просто на каждый запрос предется перебирать всю таблицу

Страница 570 из 921