
Nikolay
01.07.2016
14:10:44
как лучше сделать raise NotAuthorized?

Иван
01.07.2016
15:03:28
Привет, объяните пожалуйста вот это - "Если подкласс использует переменную экземпляра с таким же именем, как и у переменной, используемой одним из его предков, он перепишет значение переменной своих предков"

Nikolay
01.07.2016
15:04:28
классический override, если я правильно понял

I
01.07.2016
15:07:04
ну а так да, просто переопределение

Google

Иван
01.07.2016
15:09:16
переменные экземпляра принадлежат экземплярам класса и в наследовании не учавтсвуют, так?
я не понимаю как подкласс может переписать значение переменной экземпляра класса
какой нибдуь пример что ли
для понимания

Nikolay
01.07.2016
15:10:04
я б тоже послушал

yopp
01.07.2016
15:14:49
ivars не учавствуют в наследовании, да
а вот cvars (@@) да
скорее всего про них разговор
скоуп @@ это все дети вниз помоему

Иван
01.07.2016
15:15:31
если что это циатата из книги "Язык програмирования Ruby" Флэнагана и Мацумото глава 7.3.5

yopp
01.07.2016
15:15:49
трудности перевода

Nikolay
01.07.2016
15:15:52
я пока туда не дошел еще, с нуля читаю :)

yopp
01.07.2016
15:15:56
читайте оригинал

Google

Nikolay
01.07.2016
15:16:21
угу.

Иван
01.07.2016
15:16:26
называется наследование и переменные экземпляра так что видимо все таки не про переменные класса речь идет
а вот оригинал - " If a subclass
uses an instance variable with the same name as a variable used by one of its ancestors, it will overwrite the
value of its ancestor's variable"

yopp
01.07.2016
15:21:31
o_O

Иван
01.07.2016
15:21:40
и все равно не понятно ?

Nikolay
01.07.2016
15:22:03
даже я понял :)

Иван
01.07.2016
15:29:19
может тогда напишешь пример простенький для наглядности?

yopp
01.07.2016
15:40:07
я проще объясню почему это хуйня: @ хранится внутри объекта
нет, плохой аргумент
а, господи
я понял что они имеют ввиду

Иван
01.07.2016
15:43:03
?

yopp
01.07.2016
15:45:10
repl.it помер

Mikhail
01.07.2016
15:47:44
народ скажите у counter_cache можно ли задать состояние
belongs_to :book, counter_cache: true, и добавить бы joins(:users).where(user: { status: 'active' })
както так

yopp
01.07.2016
15:49:03
короче
https://repl.it/C8BF
идея в чём
они очень хуёво выразились

Google

yopp
01.07.2016
15:49:21
вот у тебя есть какой-то гем, в котором есть реализация Animal
ты не смотрел в реализацию и решил сделать свой сабкласс Dog
и по какой-то причине выбрал имя ivar такое-же как в суперклассе
и вот пожалуйста, у тебя бага
идея в чём: в руби объект это очень простая штука
это одна таблица ivar
ссылка на класс
ссылка на собственный класс
и флаги
всё
больше в объекте ничего совершенно нет
там есть хитрость с @@
но это к вопросу отношения не имеет
так вот

yopp
01.07.2016
15:52:32
реализация отделена от данных
данные == ivar
реализация == методы
так что не важно где у тебя определён метод
в целом надо запомнить следующую штуку: self это ключевая вещь в разрешении всего чего угодно
кроме констант :)
https://repl.it/C8BF/1
короче вот простой пример

Google

yopp
01.07.2016
16:01:51
даже вот так нагляднее будет https://repl.it/C8BF/2

Иван
01.07.2016
16:02:37
спасибо большое, сейчас посмотрю

yopp
01.07.2016
16:02:46
что тут происходит: мы объявляем блок
блок это просто область кода, которую можно выполнять в контексте любого объекта
тут важное замечаение: в руби есть два, гхм, контекста
первый, который задётся self и влияет на разрешение методов и ivar
второй, биндинг, который влияет на список локальных переменных
блок это две вещи: указатель на текущий биндинг и его родителей и собственно код

Aldar
01.07.2016
16:05:09
Самая адекватная книга по руби это Well grounded rubyist

Admin
ERROR: S client not available

Aldar
01.07.2016
16:05:21
А по ООП это книга Sandy Metz

yopp
01.07.2016
16:06:02
так вот: у блока нельзя изменить биндинг, после того как блок был захвачен, но легко можно изменить self
instance_eval именно это и делает
не знаю почему они в книге так сложно про это написали, скорее всего старались избежать разборки устройства объекта
а зря
но в целом, в руби сам объект это данные. ничего больше. исключение классы, которые ещё по наследству от модуля имеют таблицу методов
(методы самом деле тоже данные, потому что метод это такой частны случай замыкания)
я кончил

Иван
01.07.2016
16:09:36
хорошо, а я постараюсь это все переварить :)
cgfcb,j

Google

Иван
01.07.2016
16:09:44
спасибо

yopp
01.07.2016
16:10:10
просто надо запомнить что @ это self@
и hello это на самом деле self.hello
и да, в руби объявление локальной переменной имеет приоритет выше чем вызов метода, так что hello = :foo всегда будет определять локальную переменную, даже если есть метод hello=
это так, для справки

Иван
01.07.2016
16:33:23
грубо говоря всё что они хотели сказать это - следи за контекстом?

Nikolay
01.07.2016
16:50:52
ух ты
render :status => 404 unless @contact
не работает (
render :text => 'Not Found', :status => '404' а так работает

Aldar
01.07.2016
17:45:37
https://www.youtube.com/watch?v=SWEts0rlezA
Кто ещё не видел, смотреть!)

Mikhail
01.07.2016
17:52:16
Да все наверно блог читают

Nikolay
01.07.2016
17:53:08
belongs_to :reseller, through: :client
шо за нахрен

Mikhail
01.07.2016
17:54:09
Связь через

Nikolay
01.07.2016
17:54:22
оно в ексепшен валится

Mikhail
01.07.2016
17:54:33
Неумело варишь

Nikolay
01.07.2016
17:54:45
ну подскажи блин

Mikhail
01.07.2016
17:54:57
В доках написано как варить

Nikolay
01.07.2016
17:55:06
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Mikhail
01.07.2016
17:55:08
Rusrails связи

Nikolay
01.07.2016
17:55:12
ок. беру доку