在RoR迁移中,如何自动增加非主键字段?我想在db定义中执行此操作,而不是在模型中执行此操作.
为什么rails不会在create中返回的项中填充自动递增列?有一个更好的方法吗?
在轨道,当你这样做a = Foo.create,然后a.id填充
但是如果你有一个通过创建的字段
def up   
  execute "ALTER TABLE my_table ADD COLUMN my_auto_incrementing_column INTEGER AUTO_INCREMENT not null UNIQUE KEY;"
end
然后,当您使用create时,该字段不会出现.你也必须使用重装.
a = Foo.create
a.id # not nil
a.my_auto_incrementing_column # nil
a.reload
a.my_auto_incrementing_column # is now populated
版本信息:
$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-darwin14.5.0]
$ bundle exec rails -v
Rails 3.2.12
$ mysql --version
mysql  Ver 14.14 Distrib 5.6.26, for osx10.10 (x86_64) using  EditLine wrapper
一些背景:
此代码适用于大型现有生产中的rails代码库,该代码库要求所有id字段都是UUID.auto_increment列不是主键,因为它是在我们发现新的外部集成伙伴无法使用我们现有的长唯一标识符(UUID)处理后添加的.
我们正在努力更新我们的ruby版本,但我们不想等待它作为解决此问题的方法.此外,在读取activerecord中的更改日志后,我仍然没有证据表明任何未来版本的ruby/rails将包含此问题的错误修复程序.
我要改进的代码:
class Foo < …如何通过 Rails 迁移将自动增量属性添加到user_number我的表中命名的列users。
我已经有一个 id 字段,它是它的主键,并且它是一个自动增量字段。我正在尝试创建一个新的自动增量字段而不删除此 id 字段..
Rails 中的测试一直是个谜,如果可能的话我会避免这样做,但我正在将一个生产应用程序放在一起,人们会为此付费,所以我确实需要测试。这个问题让我很生气,因为测试失败了,但是当我在控制台中执行相同的命令(在测试和开发模式下)时,它工作正常。
用户测试.rb
test "should update holidays booked after create"
  user = users(:robin)
  assert_equal user.holidays_booked_this_year, 4 # this passes
  absence = user.absences.create(:from => "2011-12-02", :to => "2011-12-03", :category_id => 1, :employee_notes => "Secret") # this works
  assert_equal user.holidays_booked_this_year, 5 # fails
end
缺席.rb
after_create :update_holidays_booked
def update_holidays_booked
  user = self.user
  user.holidays_booked_this_year += self.days_used # the days used attribute is calculated using a before_create callback on the absence
  user.save
end
我唯一的想法是,这与通过缺席模型上的回调更新用户模型有关,但正如我所说,这在控制台中有效。
任何意见,将不胜感激。
谢谢
罗宾
activerecord ×2
ruby ×2
callback ×1
database ×1
migration ×1
mysql ×1
primary-key ×1
unit-testing ×1