ruby-on-rails - rails :before_create callback not working for my Model

标签 ruby-on-rails ruby-on-rails-3 callback

我正在尝试在 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]]

注意[“key”,nil]

但这应该是正确的,对吧?我猜 key 将由 Contest.rb :before_create 回调添加?

也许我错过了使用 SecureRandom?

最佳答案

为什么使用attr_accessor?该方法实际上将为键定义 setter 和 getter 方法,以跟踪虚拟属性。

也许您打算使用 attr_accessible,但即便如此,这也是不必要的,因为您是直接设置属性。

真的,如果您只是像这样设置,那么您的模型中根本不需要 attr_accessor :keyattr_accessible :key 。删除 attr_accessor 即可正常工作。

关于ruby-on-rails - rails :before_create callback not working for my Model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9299647/

相关文章:

matlab - 避免中断 Matlab GUI 中的回调函数

ruby-on-rails - 检测 Rails 4 session cookie 篡改

ruby-on-rails - 跟踪用户愿望 list 上产品 Markdown 的方法?

javascript - 将html写入iframe并带有回调

ruby-on-rails - omn​​iauth 回调的长时间延迟

c++ - Rails - 如何创建桌面应用程序?

c++ - 回调函数不起作用多线程调试 (/MTd)

ruby-on-rails - .rspec 配置文件的确切位置在哪里?

mysql - 启用 local-infile 以将数据从 rails 加载到远程 mysql

ruby-on-rails - 如何使Rails 3.1在开发模式下连接 Assets ?