рельсы удаляют старую запись при создании новой записи - PullRequest
0 голосов
/ 21 ноября 2018

вот мое состояние: у меня есть модель с именем Game и модель с именем GameLevel, их отношения как в коде ниже:

class Game < ApplicationRecord
  has_many :game_level

class GameLevel < ApplicationRecord
  belongs_to :game

вот моя ситуация:

когда Game имеет GameLevel с именем default, он не должен иметь low, medium, high;

, когда Game имеет GameLevelкакие имена low, medium, high, он не должен иметь default.

, поэтому как мне удалить default при создании (или обновлении, если запись существует) low, medium, highи как мне удалить low ,medium, high при создании (или обновлении, когда существует запись) default в модели рельсов?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вы можете использовать ниже код

class GmaeLevel < ApplicationRecord
    belongs_to :game
    before_save :update_date
    private
       def update_date
           self.name == "default" ? self.game.game_levels.(name: ["low","medium","high"]).destroy_all : self.game.game_levels.where(name: "default").destroy
       end
end
0 голосов
/ 21 ноября 2018

Вы можете использовать before_save упомянутый обратный вызов здесь И вы должны использовать game_levels вместо game_level в качестве соглашения.

В качестве примера вы можете написать что-то вроде этого;

class GameLevel < ApplicationRecord #or ActiveRecord::Base
  belongs_to :game
  before_save :remove_unnecessary

  private
    def remove_unnecessary
      if self.name == "default"
        self.game.game_levels.where(name: ["low", "medium", "high"]).destroy_all()
      end
      if ["low", "medium", "high"].any?{ |type| self.name == type }
        self.game.game_levels.where(name: "default").destroy_all()
      end
    end
end

для уничтожения вы можете посмотреть здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...