如何调试不会更新或创建的Rails3模型?

And*_*vey 1 ruby-on-rails ruby-on-rails-3

帮助,我打破了我的Rails3用户模型!

我首先注意到我无法从应用程序本身更新用户.

看来我也无法从rails控制台.

User.save回报false.

User.create生成一条记录id=nil,该记录未保存到数据库中.

我花了两天时间试图解决问题所在.我已经取出了所有的CanCan和Devise验证.我已经逐行完成了代码.我很难过!

日志中没有任何东西指向我明显的方向.

我评论了User.rb中的所有内容,但没有任何乐趣.

我知道这是一个非常模糊的问题,从远处回答几乎是不可能的.

我希望有人可以提出合理的步骤来解决这个问题并试图找出正在发生的事情.

我仍然是Rails的新手,并且热衷于了解它是如何工作的.

谢谢你的想法!

更新:

过去一周我一直在研究这个问题.最终我从零开始创建了一个新的rails应用程序,系统地将旧应用程序逐个移动到新应用程序中,以尝试找出问题所在.

我已将其跟踪到我的自定义Devise路线.

的routes.rb

devise_for :users,  :path_prefix => 'registration', :controllers => {:registrations => 'users/registrations'}
Run Code Online (Sandbox Code Playgroud)

如果我删除:controllers行,那么我可以使用Devise用户编辑表单更新用户名.

然而,这不是一个可行的解决方案.设计编辑表单仅提供名称和电子邮件字段,但我的用户模型中还有其他几个用户需要访问的列.因此自定义路由.

所以到目前为止我已经跟踪了这个问题,但我不确定在哪里看.我尝试将registrations_controller编辑为默认值,但没有运气.(我甚至直接从设计git存储库粘贴代码).

def edit
  super
end

def update
  super   
end
Run Code Online (Sandbox Code Playgroud)

所以我认为问题不在于控制器.

这留下了形式本身.表格定义为

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :multipart => true }) do |f| %>
Run Code Online (Sandbox Code Playgroud)

我看不出有任何问题.我想不出还有什么可以调试这个.

回顾一下,编辑表单按预期显示,用户可以编辑信息,单击更新,按预期重定向,不显示错误,但不保存编辑的信息.尾部显示没有调用SQL保存.

很难过,我很欣赏任何狂野的想法或建议!

非常感谢

Wuk*_*ank 8

试试这个在控制台中调试:

require 'pp'
u = User.new
u.save
pp u.errors
Run Code Online (Sandbox Code Playgroud)

这应该会给您带来阻止用户保存到数据库的错误.