У меня есть рубиновый код из моего проекта Ruby on Rails.
Я форматирую некоторые данные, поэтому я вызываю attributes.extract!
, чтобы получить нужные мне поля из моей модели.
Недавно я заметил, что время от времени данные не извлекаются должным образом. Я понял, что мне нужен сплат-оператор. Но это странно, потому что я заметил, что иногда, когда метод вызывается в моем проекте Rails, он иногда извлекает данные без использования оператора splat. Но когда я запускаю код из своей консоли Rails, он никогда не извлекает данные, пока я не добавлю оператор splat.
Вот код, о котором идет речь
# in a service file, let's call it service.rb
def self.format_user_home_address_data(user)
# This doesn't work in the console but sometimes works when run in my Rails project
home_address_data = user.attributes.extract!(User::HOME_ADDRESS_FIELDS)
home_address_data[:address_type] = "home"
home_address_data
end
# at the end this method will sometimes return { address_type: "home" } or
# sometimes it'll actually return the extracted attributes as expected
HOME_ADDRESS_FIELDS — это просто массив со значениями ["address_line_1", "city", "state", "zip"]
Во всяком случае, я знаю, что для правильной работы мне нужно сделать это
home_address_data = user.attributes.extract!(*User::HOME_ADDRESS_FIELDS)
Но кто-нибудь знает, почему я так долго не добавлял оператор splat? Есть ли какое-то волшебство Ruby on Rails, которое случается лишь иногда? В чем дело?
before_create
для назначения адресных полей. После создания пользователя я затем отправляю его в свой класс обслуживания здесь (я форматирую данные раньше), а затем в классе обслуживания есть еще один метод, в котором он затем отправляется в конечную точку API. Сам метод службы вызывает этот метод форматирования здесь. - person Gabriel   schedule 23.05.2020