Size: a a a

2019 September 18

IM

Igor Morozov in pro.ruby
разнообразие вариантов — это хорошо
источник

AS

Alexandr Shapalov in pro.ruby
Хм, а как лучше икать и записывать уникальные рекорды в базe сразу по нескольким полям.

User.find_or_create_by(first_name: 'Penélope', name2: "", nam3: "" )

А если у меня 30 полей. Отдельный квери писать на поиск и потом сравнивать?
источник

IM

Igor Morozov in pro.ruby
unique констрейнт повесить на несколько полей сразу и всё
источник

AS

Alexandr Shapalov in pro.ruby
Хм unique метод найдет в базе все уники и что дальше?
источник

IM

Igor Morozov in pro.ruby
а, тут не ограничение на запись, не так понял
источник

IM

Igor Morozov in pro.ruby
если есть рансак, то можно сгенерить запрос для него
источник

AS

Alexandr Shapalov in pro.ruby
раншака нету, тут просто моржно через .find
вопрос только в скорости, а если 1 млн в базе рекордов
интересно как решают
источник
2019 September 19

AL

Ambro Lastwill in pro.ruby
Дратути. Я совсем новичок, читаю теорию, тренируюсь на codewars. Делал эту кату и на последнем тесте обнаружил неочевидное для меня поведение оператора присвоения. Там просили не менять аргумент (массив), поэтому я в методе присвоил его значение (как я думал) новому аргументу, затем уже новый аргумент изменял так, как требовала задача. Все тесты мой код прошёл нормально, а вот тест на целостность исходного аргумента проваливался. Я вышел из ситуации путём присвоения новой переменной значения суммы пустого массива и исходного аргумента. В комментариях нашёл более правильный способ, но мне не до конца ясна теоретическая часть. Почему при присвоении внутри метода новая переменная является ссылкой на старую? Объясните, если не трудно

def remove_smallest(numbers)

# clean = numbers — вариант, заваливший тест
clean = [] + numbers # мой костыль =)
# clean = numbers.dup — хороший вариант из комментариев
clean.delete_at(clean.index(clean.min)) unless clean.empty?
clean
 
end

remove_smallest([172, 9, 107, 258, 357, 314, 47, 281, 232])
источник

k

kolas in pro.ruby
в руби все ссылками передается
источник

AL

Ambro Lastwill in pro.ruby
То есть я неправильно понимаю присвоение, да?
источник

k

kolas in pro.ruby
ты передаешь переменную number которая указывает на объект(массив) и если просто присвоить другой переменной то она тоже будет указывать на этот же объект
источник

AL

Ambro Lastwill in pro.ruby
Да, мне надо было просто внимательнее читать о присвоении. Там не значение присваивается, а ссылка на объект. Для получения в переменную значения из объекта нужно чуть больше усилий :D
источник

AL

Ambro Lastwill in pro.ruby
Спасибо!
источник

k

kolas in pro.ruby
короче object_id вызови на переменной и потом потестируй что будет при присвоениях
источник

AL

Ambro Lastwill in pro.ruby
Это, наверное, для экономии памяти сделано
источник

IM

Igor Morozov in pro.ruby
о, я вошёл в историю
источник

IM

Igor Morozov in pro.ruby
треть сообщений за 3 дня — мои!
источник

MY

Mikhail Yudin in pro.ruby
Привет =)
Хочу сделать инициализацию классов автоматически подключенных модулей.

Dir.glob("./handlers/**/*.rb").each { |file| load file }
   module_classes = Handlers::Commands.constants.map(&Handlers.method(:const_get)).grep(Module)
   @handlers = module_classes.map do |cmd_class|
     puts cmd_class
     cmd_class.new bot
   end

Ругается на uninitialized constant Handlers::RepliedCommand , хотя:

handlers/commands/replied_command.rb:
module Handlers
 module Commands
   class RepliedCommand < Handlers::Base
     def process

     end
   end
 end
end

handlers/base.rb:
module Handlers
 class Base
 end
end


Что я делаю не так?
источник

MY

Mikhail Yudin in pro.ruby
require './handlers/base' есть перед загрузкой остальных модулей
источник

IM

Igor Morozov in pro.ruby
Commands потеряны
источник