Почему я не могу получить доступ к этой переменной экземпляра (в модели) из другого метода? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть метод в моей модели, и я вызываю его с помощью before_create:

  def first_position
    if [...]
      [...]
    else
      @last_known = Picture.where(user_id: user_id).order('position desc').first
      self.position = nil
    end
  end

И у меня есть другой метод, который я вызываю с помощью after_commit:

  def default_position
    pictures = Picture.where(user_id: user_id).where('created_at > ?', @last_known.created_at)

    i = @last_known.position + 1
    pictures.each do |pic|
      pic.position = i
      i += 1
    end
  end

Но в default_position, @last_known возвращает ноль .Вы знаете, почему?

РЕДАКТИРОВАТЬ:

Ну, я обнаружил, что у меня есть два коммита, но тот, который касается изображения, является вторым, поэтому @last_known этоустанавливается при первом коммите, но исчезает при втором коммите.

1 Ответ

0 голосов
/ 02 октября 2018

Изначально я думал, что ActiveRecord перезагружает запись за некоторое время до after_commit или, по крайней мере, повторно инициализирует ее.Я проверил с Rails 5.2.1, и ничего не происходит с переменными экземпляра, они остаются правильно установленными.Это означает, что (если вы не используете более старые Rails), для данного пользователя просто нет картинок, и ваш код, похоже, не справляется с этим.

Кроме того, ваш after_commit будет работать после того, как вы обновитеобъект, который может быть проблемой, поскольку ваша переменная не будет установлена ​​в этом случае.

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