我创建了Rails的ActiveRecord的验证,而当它被破坏,没有记录被保存(事实上,我相信它被保存,然后在控制台输出见过ROLLBACK正在做的)。ActiveRecord的验证工作不
但是,我没有被重定向到新窗体并显示我添加的错误消息,而是被发送到索引页面(没有创建新的记录,这是正确的,但我想要其他行为) 。我相信是一个愚蠢的事情,与回滚有关(就像记录正在保存,这就是为什么我重定向到索引页,但随后回滚已完成 - 不知道为什么,也没有记录被保存)。任何想法如何解决这个问题?
我创建了以下验证:
# Adds an error if the replacement date is in the future
def replacement_date_is_not_future
unless replacement_date.blank? or replacement_date <= Date.today
errors.add(:replacement_date, :date)
end
end
,并在我的模型的头,我有以下:
validate :replacement_date_is_not_future
这是我的控制器方法:
def create
@device_replacement = DeviceReplacementForm.new(replacement_params)
if @device_replacement.save
redirect_to device_replacements_path
else
render 'new'
end
end
这是我的控制台输出:
Started POST "/device_replacements" for 127.0.0.1 at 2015-12-31 10:48:09 -0300
Processing by DeviceReplacementsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"MbR2lXp5ujSNILEKC2ROhij3+yNpIL3ymEdZxJejSxc=", "device_replacement_form"=>{"old_esn"=>"2-3021325", "new_esn"=>"DEMO-0-648340", "replacement_date"=>"2016-01-03"}, "commit"=>"Create"}
RackCAS::ActiveRecordStore::Session Load (0.9ms) SELECT "sessions".* FROM "sessions" WHERE "sessions"."session_id" = '0ee02a1bcbc8548e172d511c02b97490' ORDER BY "sessions"."id" ASC LIMIT 1
Device Load (1.1ms) SELECT "devices".* FROM "devices" WHERE "devices"."esn" = '2-3021325' LIMIT 1
Device Load (1.6ms) SELECT "devices".* FROM "devices" WHERE "devices"."esn" = 'DEMO-0-648340' LIMIT 1
(0.3ms) BEGIN
(0.5ms) SELECT "devices"."asset_id" FROM "devices" WHERE "devices"."id" = 81265
(0.3ms) ROLLBACK
Redirected to http://localhost:3000/device_replacements
Completed 302 Found in 93ms (ActiveRecord: 14.8ms)
RackCAS::ActiveRecordStore::Session Load (1.9ms) SELECT "sessions".* FROM "sessions" WHERE "sessions"."session_id" = '0ee02a1bcbc8548e172d511c02b97490' LIMIT 1
(0.3ms) BEGIN
(0.4ms) COMMIT
我没有看到任何记录被保存到数据库。行为似乎正确。 –
但ifrent条件(@ device_replacement.save)是真实的,这就是为什么被重定向到索引页面。但由于回滚没有显示记录。合理? – WhomWhomWhom
您可以使用像byebug这样的调试器。它会停止执行并让您在创建动作中进行游戏。 –