#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Я работаю над проектом Rails, и у меня возникли проблемы с сохранением логического значения. Отлично работает, если это строка.
Вот более короткая версия модели
require 'active_record'
# Public: Class representing data
class RandomClass
include ActiveModel::Serializers::JSON
# Public: Returns boolean hopefully
attr_accessor :why_does_this_not_work
def initialize(values = {})
@why_does_this_not_work = values[:why_does_this_not_work]
end
def update_with(new_data)
self.why_does_this_not_work = new_data.why_does_this_not_work || why_does_this_not_work
end
Когда значение why_does_this_not_work
инициализируется, оно устанавливается в логическое значение, но когда update_with
вызывается с new_data
, хотя значение существует, присвоение не работает.
self.why_does_this_not_work = true
сохраняется, но когда я делаю self.why_does_this_not_work = new_data.why_does_this_not_work || why_does_this_not_work
или self.why_does_this_not_work = new_data.why_does_this_not_work
значение не сохраняется.
То же самое с why_does_this_not_work
, значение сохраняется при его инициализации, но оно ничего не возвращает при вызове.
Все вышеперечисленное работает нормально, если вместо этого передается строка.
Я предполагаю, что это может быть как-то связано с логическими значениями в ruby. Я попытался посмотреть на класс, и значение возвращается как TrueClass
или FalseClass
Любая помощь была бы оценена. Я не уверен, сыграет ли добавление кода контроллера какую-либо роль.
Env:
Ruby: 2.6.2,
Rails: 5.2.4.3
Ответ №1:
Это не работает, когда new_data.why_does_this_not_work
установлено значение false? ||
Оператор проигнорирует его, если это false
.
false || true # => true
Как насчет того, чтобы попробовать
def update_with(new_data)
new_value = new_data.why_does_this_not_work.nil? ? why_does_this_not_work : new_data.why_does_this_not_work
self.why_does_this_not_work = new_value
end
Это будет принимать любое значение new_data
, если оно не равно нулю. Затем он вернется к существующему значению.
Комментарии:
1. Жаль, что я не сделал этот пост 2 дня назад. Спасибо. Ruby — это много магии, которую я пытаюсь изучить.