我正在使用Rails 3.2.8和Devise 2.1.2(最新版本),我很困惑为什么我可以使用Ruby 1.9.2创建用户,但不能使用Ruby 1.9.3,使用完全< / em>相同的代码库。
Rails控制台:
User.find_or_create_by_email('example@example.com', :password => 'example', :first_name => 'Super', :last_name => 'Admin', :terms_and_conditions => true)
1.9.3中的输出显示了ROLLBACK(见下文),但我似乎无法弄清楚原因。
使用1.9.2时的输出(部分):
SQL (0.3ms) INSERT INTO "versions" ("created_at", "event", "item_id", "item_type", "object", "whodunnit") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["created_at", Wed, 10 Oct 2012 13:57:07 UTC +00:00], ["event", "create"], ["item_id", 20], ["item_type", "OrderType"], ["object", nil], ["whodunnit", nil]]
Currency Load (1.1ms) SELECT "currencies".* FROM "currencies" WHERE "currencies"."code" = 'USD' LIMIT 1
SQL (2.4ms) INSERT INTO ..
(continues with the next insert statement)
使用1.9.3时的输出(部分):
SQL (0.3ms) INSERT INTO "versions" ("created_at", "event", "item_id", "item_type", "object", "whodunnit") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["created_at", Wed, 10 Oct 2012 12:29:49 UTC +00:00], ["event", "create"], ["item_id", 16], ["item_type", "OrderType"], ["object", nil], ["whodunnit", nil]]
Currency Load (0.3ms) SELECT "currencies".* FROM "currencies" WHERE "currencies"."code" = 'USD' LIMIT 1
(0.1ms) ROLLBACK
=> #<User id: 4, first_name: "Super", last_name: "Admin", admin_notes: nil, email: "example@example.com", ...
(stops)
我认为这可能是Devise的一个问题,但我不确定。
非常感谢任何帮助!
10月19日更新:
我发现问题的原因是user.rb中的after_create
回调创建了一个“代理”(通过代理模型),它设置了佣金= 9.95
来自broker.rb中的注释:
# commission :decimal(, )
还有更多来自broker.rb:
belongs_to :user
PRICE_REGEX = /^([1-9]\d{0,20}|0)(\.\d{0,3})?$/
PRICE_ERROR_MESSAGE = "Must be a number. If you want to include decimals, please use comma as decimal separator. Periods (.) = thousand separator cannot be used."
validates :commission, :format => {:with => PRICE_REGEX, :message => PRICE_ERROR_MESSAGE }, :allow_blank => true
如上所述,将代理佣金设置为9.95可以与ruby 1.9.2一起使用,但是使用ruby 1.9.3会失败。
在1.9.3中通过rails控制台保存时,我收到“ActiveRecord :: RecordInvalid:Validation failed ...”错误。 1.9.2没有错误。
如果我将其设置为10而不是9.95,则它在1.9.2和1.9.3中都有效(经纪佣金设置为10)。
如果我将其设置为9,95(逗号,而不是句点),则用户和经纪人创建正常但经纪人佣金设置为0。
正如验证错误消息所示,不允许使用句点(。),因此验证失败是有意义的,但是在切换到1.9.3之前,它会成为ruby 1.9.2中的一个错误
欢迎任何好的解释: - )
答案 0 :(得分:0)
保存失败后检查@ user.errors它可能有一个线索
修改
在你的Rails控制台中
@user = User.find_or_create_by_email('example@example.com', :password => 'example', :first_name => 'Super', :last_name => 'Admin', :terms_and_conditions => true)
@user.errors
或
@user.errors.full_messages