Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 September 18

SL

Sergey Lebedev in Ruby, Rails, Hanami | dry-rb
ты получаешь сразу в name и age значения этих полей из объекта
источник

AA

Alex A in Ruby, Rails, Hanami | dry-rb
Sergey Lebedev
Ребзи, а как в 2.7 теперь правильно делать
arr = [{ name: 'ivan', age: 2 }, { name: 'john', age: 3 }]
arr.each do |name:, age:|
 puts "#{name}_#{age}"
end

warning
: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
надо наверно писать свой each, который будет с вашими хешами делать **hash_instance  и посылать в блок
источник

AA

Alex A in Ruby, Rails, Hanami | dry-rb
потому что в блоке вы объявляете keyword arguments, а подаете туда хеши
источник

SL

Sergey Lebedev in Ruby, Rails, Hanami | dry-rb
видать проще вообще отказаться от такого синтаксиса, а жаль
источник

SL

Sergey Lebedev in Ruby, Rails, Hanami | dry-rb
через Pattern matching получилось деструктурировать
arr.each do |obj|
 case obj
  in { name:, age: }
  puts "#{name}_#{age}"
 end
end

но вылезает другой варнинг))
warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby!
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
люди подскажите пожалуйста кое что по ORM.
Какая связь должна быть между тремя таблицами, что бы используя orm методы для выборки третьей таблицы через вторую в запрос добавлялись ID первых двух таблиц?
например:
@model1.model2.model3
делало бы SQL запрос в виде:
FROM model3 WHERE (model1_id = 1 and model2_id = 2)
очень нужно, спасибо.
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
https://guides.rubyonrails.org/association_basics.html#the-has-many-through-association ? но там вторая таблица должна включать в себя ключ в первой и третьей
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
спасибо конечно. но немного не то что нужно.
Нужно что бы было has_one
что-то типа:
model1
has_one model3

model2
has_one model3

model3
belongs_to model1
belongs_to model2

я так делаю но у меня все равно только один id устанавливается.
дело в том что связь только такая может быть.
потому что внести изменения в таблицы первых двух моделей запрещено.
изменять миграции можно только в третьей таблице то есть model3

а две первые друг с другом имеют изначально связь такую:
model1
belongs_to model2
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
и все
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
а мне нужно их связать третьей таблицей.
можно внедрить туда has_one конечно через instance_eval
я так и делаю но SQL запрос без второго id создается
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
Model3.where(model2: @model1.model2) ?
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
не так красиво
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
хм
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
а еще можете кое что пояснить. через instance_eval внедряю модель такую штуку
after_initialize :my_method
в это методе код:
@models3 = Model3.where(id1, id2)

и добавляю туда метод еще один
def models3
 @models3
end
короче когда инициализируется перепрошитый инстанс, внедренный метод срабатывает но не срабатывает @models3 = Model3.where(id1, id2)
он срабатывает когда я вызываю из этого инстанса models3
и так какждый раз.
но если добавить .take в конце он сразу срабатывает но take это не то.
будто этот where ORMный какой-то ленивый.
и код @models3 = Model3.where(id1, id2)
назначает @models3 код, а не результат
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
блин, получилось длинно и непонятно, если говорить коротко то почему where не срабатывает сразу - не назначает результат переменное, а будто назначает ей метод.
источник

OA

Ortemy Alexandrovich in Ruby, Rails, Hanami | dry-rb
потому что он ленивый
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
Ortemy Alexandrovich
потому что он ленивый
серьезно или ты шутишь?
источник

OA

Ortemy Alexandrovich in Ruby, Rails, Hanami | dry-rb
[1] pry(main)> u = User.where(id: 1);nil;
[2] pry(main)> u
 User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1  [["id", 1]]
=> [#<User:0x0000560546eec130
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
ну да.
источник

CR

CocoaRocket Rocket 🚀... in Ruby, Rails, Hanami | dry-rb
жесть
источник