相关疑难解决方法(0)

在Ruby on Rails中自动增加非主键字段

在RoR迁移中,如何自动增加非主键字段?我想在db定义中执行此操作,而不是在模型中执行此操作.

database migration ruby-on-rails primary-key auto-increment

9
推荐指数
1
解决办法
5717
查看次数

为什么activerecord没有填充从create返回的项目中的自动递增列?

为什么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
Run Code Online (Sandbox Code Playgroud)

然后,当您使用create时,该字段不会出现.你也必须使用重装.

a = Foo.create
a.id # not nil
a.my_auto_incrementing_column # nil
a.reload
a.my_auto_incrementing_column # is now populated
Run Code Online (Sandbox Code Playgroud)

版本信息:

$ 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
Run Code Online (Sandbox Code Playgroud)

一些背景:

此代码适用于大型现有生产中的rails代码库,该代码库要求所有id字段都是UUID.auto_increment列不是主键,因为它是在我们发现新的外部集成伙伴无法使用我们现有的长唯一标识符(UUID)处理后添加的.

我们正在努力更新我们的ruby版本,但我们不想等待它作为解决此问题的方法.此外,在读取activerecord中的更改日志后,我仍然没有证据表明任何未来版本的ruby/rails将包含此问题的错误修复程序.

我要改进的代码:

class Foo < …
Run Code Online (Sandbox Code Playgroud)

ruby mysql activerecord ruby-on-rails

8
推荐指数
1
解决办法
313
查看次数

通过 Rails 中的迁移添加自动增量

如何通过 Rails 迁移将自动增量属性添加到user_number我的表中命名的列users

我已经有一个 id 字段,它是它的主键,并且它是一个自动增量字段。我正在尝试创建一个新的自动增量字段而不删除此 id 字段..

ruby ruby-on-rails ruby-on-rails-4

5
推荐指数
1
解决办法
1万
查看次数

after_create 回调在测试中不起作用,但在控制台中起作用

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
Run Code Online (Sandbox Code Playgroud)

缺席.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
Run Code Online (Sandbox Code Playgroud)

我唯一的想法是,这与通过缺席模型上的回调更新用户模型有关,但正如我所说,这在控制台中有效。

任何意见,将不胜感激。

谢谢

罗宾

activerecord unit-testing ruby-on-rails callback

4
推荐指数
1
解决办法
3088
查看次数