Я разбираю CSV-файл и строковый столбец, который должен быть логическим. Значения: «Y» или «N». Я хотел бы обрабатывать их в обратном вызове и вставлять в виде boolean. Возможно ли это с помощью обратных вызовов activerecord?Установить атрибут activerecord для boolean из строки перед сохранением
Rails 5.0.0
CSV:
RULE_TYPE,DESCRIPTION,STANDARD_OPTION
OY,One,Y
TN,Two,N
миграция:
...
t.boolean :standard_option
...
Модель:
class OptionRule < ApplicationRecord
before_validation :standard_option_bool
private
def standard_option_bool
puts self.standard_option
self.standard_option=="Y" ? self.standard_option=true : self.standard_option=false
end
end
рельсы с
2.3.1 :001 > OptionRule.create(rule_type:'OY', description:"One", standard_option: 'Y')
(0.1ms) BEGIN
true
SQL (0.6ms) INSERT INTO "option_rules" ("rule_type", "description", "standard_option", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "rule_type" [["rule_type", "OY"], ["description", "One"], ["standard_option", false], ["created_at", 2016-07-25 10:34:06 UTC], ["updated_at", 2016-07-25 10:34:06 UTC]]
(6.2ms) COMMIT
=> #<OptionRule rule_type: "OY", description: "One", standard_option: false, created_at: "2016-07-25 10:34:06", updated_at: "2016-07-25 10:34:06">
Обратите внимание, что он возвращает «истина» для команды puts, а не «Y». Я должен думать, что activerecord трансформирует это перед обратными вызовами.
Вы можете разместить код, где разбор его? Там было бы лучше. –
Что случилось с тем, что вы написали? Есть ли проблемы с вашим кодом? Мне кажется на первый взгляд. – Caillou
Это дословно то, что у меня есть. Все равно вставляет как false, когда standard_option: 'Y' – Mro