为什么Rails为具有默认值的列保存/返回错误的值?

时间:2015-01-20 23:54:02

标签: ruby-on-rails ruby ruby-on-rails-4

我正在使用postgressql 9.3.1和Rails 4.1.4,并且遇到了一些奇怪的事情:默认设置为false的值保存为true!

schema.rb中,我有:

create_table "practice_scores", force: true do |t|
    ...
    t.boolean  "visualized",    default: false
    t.boolean  "selected",      default: false
    ...
end

我有:

practice_score = PracticeScore.new(assessment: @respondent.assessment, practice: @practice, user: @respondent.user)
@respondent.questions << Question.new(practice: @practice, practice_score: practice_score)

我认为这会在保存practice_score时自动保存Question,而练习_score的selected值将为false。当我使用rails控制台检查对象时,它是true

有些铁路可能会覆盖这个价值吗?

1 个答案:

答案 0 :(得分:1)

这是奇怪的行为。两个记录都节省了吗?我相信你需要先保存才能将其主键用作另一个对象的外键。另一种选择是使用#create

要进行调试,请使用bang方法。 #save!#create!如果控制台无效,控制台会因为错误而爆炸。

如果这没有解决问题,我会进行架构重置。

命令为rake db:schema:load。这将获取schema.rb文件并完全基于该文件创建新表。请注意,这将清理您的数据库,因此如果开发中有大量数据,您可以导入.dump文件。