首页 > 解决方案 > 设置为 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_animal_translation: true,
# 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,
# is_vehicle_translation: true,
# ...>]

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),有没有绕过这个?

标签: mobility

解决方案


推荐阅读