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

时间:2011-04-29 11:42:28

标签: ruby-on-rails ruby-on-rails-3

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

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

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

User.save返回false

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

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

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

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

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

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

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

感谢您的想法!

更新:

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

我已将其追踪到我的自定义设计路线。

的routes.rb

devise_for :users,  :path_prefix => 'registration', :controllers => {:registrations => 'users/registrations'}

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

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

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

def edit
  super
end

def update
  super   
end

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

哪个留下了表单本身。表单定义为

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

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

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

非常难倒,我很欣赏任何疯狂的想法或建议!

非常感谢

2 个答案:

答案 0 :(得分:8)

尝试在控制台中调试:

require 'pp'
u = User.new
u.save
pp u.errors

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

答案 1 :(得分:1)

我最终将这一点追溯到了我的愚蠢疏忽。

在控制器中我有

resource.update_attributes!(params[:resource_name])

当我需要的是

resource.update_attributes!(params[resource_name])

我必须在某个时候做的编辑。

一个自我造成的问题需要两个星期的时间才能解决!