Rails: обратный вызов before_create не работает для моей модели - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь сделать следующее в моей модели Rails 3:

require 'securerandom'

class Contest < ActiveRecord::Base
  attr_accessor :key
  before_create :generate_key

  private

  def generate_key
    self.key = SecureRandom.hex(3)
  end

end

Однако, когда я создаю Конкурс, все поля в моей таблице кажутся правильными, кроме ключа, который остается нулевым в моей БД.

Подробнее:

В моем журнале сервера rails я вижу следующее, когда создаю конкурс через мою "форму создания конкурса"

SQL (0.5ms)  INSERT INTO "contests" ("category", "created_at", "description", "key", "price", "status", "time", "title", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)  [["category", "camisas"], ["created_at", Wed, 15 Feb 2012 18:57:16 UTC +00:00], ["description", "test_description"], ["key", nil], ["price", 111], ["status", "In process"], ["time", "2sem"], ["title", "test_contest"], ["updated_at", Wed, 15 Feb 2012 18:57:16 UTC +00:00], ["user_id", 5]]

Обратите внимание на ["ключ", ноль]

Но это должно быть правильно, верно? Я предполагаю, что ключ будет добавлен обратным вызовом Contest.rb: before_create?

Может, я скучаю по SecureRandom?

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

Почему вы используете attr_accessor?Этот метод на самом деле будет определять и метод установки, и метод получения для ключа, отслеживая виртуальный атрибут.

Возможно, вы намеревались использовать attr_accessible, но даже в этом нет необходимости, потому что вы 'Переустановите атрибут напрямую.

Действительно, вам вообще не нужно ни attr_accessor :key, ни attr_accessible :key в вашей модели, если вы просто устанавливаете его так.Удалите attr_accessor и все заработает.

0 голосов
/ 15 февраля 2012

Я думаю, вы должны написать attr_accessible <list accessible params>, например:

attr_accessible :key, :category

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