Rails - Как я могу сохранить значение поля (которое использует идентификатор записи) через обратный вызов? - PullRequest
2 голосов
/ 19 ноября 2011

Я хочу создать хеш, который объединяет user_id создаваемого пользователя + идентификатор записи, чтобы создать хеш MD5, но только при создании записи. (Причины многословны, но это извлекает их).

Я пытаюсь:

class BlogPost < ActiveRecord::Base  

  after_create :hash_this

  private

  def hash_this
    self.info_md5_hashed = (id.to_str + creator_user_id).my_MD5_hash_method
  end

end

Как я могу убедиться, что поле info_md5_hashed действительно сохранено в базе данных?

Если я использую before_create Я бы предположил, что идентификатор еще не доступен? (
Если я использую after_create, я бы предположил, что идентификатор теперь доступен
- но нужно ли мне как-то еще сохранять для сохранения только что рассчитанного значения поля info_md5_hashed?

1 Ответ

2 голосов
/ 19 ноября 2011

Да, вам придется сохранить запись дважды, поскольку генерация идентификатора происходит в базе данных. Единственный способ обойти это - предварительно упорядочить идентификатор, но это почти наверняка не имеет смысла, и вы должны просто согласиться с тем, что вам придется сохранить запись дважды;)

Просто вызовите второе сохранение изнутри вашего after_create хука - это нормально сделать (т.е. не будет проблемой повторения зацикливания), потому что второе сохранение не вызовет этот хук снова;)

n.b. Вы можете всегда основывать хэш на чем-то, что вы знаете как уникальное, например на имени пользователя или электронной почте, если хотите избежать двойного сохранения.

...