如何解决表后端转换在设置为 null-sy 值时自毁
不确定这是错误、功能、遗漏的文档还是错误的配置,但是当我将所有翻译属性设置为 null-sy 值时,翻译记录会自毁。
我的表后端移动性设置如下:
schema.rb
create table "base_model",force: :cascade do |t|
t.boolean "is_animal"
t.boolean "is_vehicle"
...
end
create table "base_model_translation",force: :cascade do |t|
t.bigint "base_model_id",null: false
t.string "locale",null: false
t.boolean "is_animal_translation"
t.boolean "is_vehicle_translation"
...
end
base_model.rb
class BaseModel < ApplicationRecord
extend mobility
has_many :translations,class_name: "BaseModelTranslations",autosave: true,dependent: :destroy
translates :is_animal_translation
translates :is_vehicle_translation
end
base_model_translation.rb
class BaseModelTranslation < ApplicationRecord
belongs_to :base_model,touch: true,inverse_of: :translations
end
在 Rails 控制台上:
base_model = BaseModel.last
base_model.reload.translations # => []
# SET TO NULLSY
base_model.is_animal_translation = true
base_model.save
base_model.reload.translations
# => [
# <#BaseModel::Translation
# id: 1,# is_animal_translation: true,# is_vehicle_translation: nil,# ...>]
base_model.is_animal_translation = false
base_model.save
base_model.reload.translations # => []
# SET TO PARTIAL NULLSY THEN FULL NULLSY
base_model.is_animal_translation = true
base_model.is_vehicle_translation = true
base_model.save
base_model.reload.translations
# => [
# <#BaseModel::Translation
# id: 1,# is_vehicle_translation: true,# ...>]
base_model.is_animal_translation = false
base_model.save
base_model.reload.translations
# => [
# <#BaseModel::Translation
# id: 1,# is_animal_translation: false,# ...>]
base_model.is_animal_translation = false
base_model.save
base_model.reload.translations # => []
这是有意的行为吗?如果是这样,是否可以绕过?
编辑:看起来这是一个预期的行为 (https://github.com/shioyama/mobility/blob/3cbeaeec8ef0a6d22ee05229141cd2b2bb33b17f/lib/mobility/backends/active_record/table.rb#L306),是否有绕过这个的方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。