2015-01-20 54 views
0

我正在使用postgressql 9.3.1和Rails 4.1.4,并遇到一些奇怪的事情:默认情况下设置为false的值将被保存为true!为什么Rails使用默认值保存/返回错误值?

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_scoreQuestion保存和selected为practice_score的值将是false。当我使用导轨控制台检查对象时,它是true

是否有轨道可能覆盖的价值?

回答

1

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

对于调试,请使用bang方法。 #save!#create!如果控制台无效,则会在您的脸上爆炸并出现错误。

如果这不能解决问题,我会做一个模式重置。

该命令是rake db:schema:load。这将采用schema.rb文件并基于该文件创建新的表。注意这会清理你的数据库,所以如果在开发中有很多数据,你可以导入一个.dump文件。

+0

是的,记录都是保存的。我认为Rails足够聪明,知道它需要将模型的id用作外键。 – 2015-01-21 00:15:44

+0

这很奇怪。我已经开始并在测试过程中重启了我的Rails服务器几次,我得到了预期的行为。我想知道是什么导致了这个问题? – 2015-01-21 00:23:00

+0

不确定。我有过工作流程出错的协作经验,事情最终会从一个分支生成的schema.rb文件中结束,但这听起来不像是你遇到的问题。很高兴简单的重置工作。比倾销分贝更好。 – Jay 2015-01-21 00:33:15