Ruby on rails 如何调试赢得';更新还是创建?
救命啊,我已经破坏了我的Rails3用户模型 我首先注意到,我无法从应用程序本身更新用户 似乎我也无法从rails控制台中访问Ruby on rails 如何调试赢得';更新还是创建?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,救命啊,我已经破坏了我的Rails3用户模型 我首先注意到,我无法从应用程序本身更新用户 似乎我也无法从rails控制台中访问 User.save返回false User.create生成id=nil的记录,该记录不会保存到数据库中 我花了两天时间想弄清楚问题出在哪里。我已经拿出了我所有的CanCan并设计了验证。我已经把代码一行一行地看了一遍。我被难住了 日志中没有任何东西能告诉我一个明显的方向 我对User.rb上的所有内容都发表了评论,但没有任何乐趣 我知道这是一个非常模糊的问题,几乎不可
User.save
返回false
User.create
生成id=nil的记录,该记录不会保存到数据库中
我花了两天时间想弄清楚问题出在哪里。我已经拿出了我所有的CanCan并设计了验证。我已经把代码一行一行地看了一遍。我被难住了
日志中没有任何东西能告诉我一个明显的方向
我对User.rb上的所有内容都发表了评论,但没有任何乐趣
我知道这是一个非常模糊的问题,几乎不可能从很远的地方回答
我希望有人能提出合理的步骤来解决这个问题,并试图弄清楚到底发生了什么
我对Rails还是相当陌生的,并且渴望了解它是如何工作的
谢谢你的想法
更新:
过去一周我一直在研究这个问题。最终,我从头开始开发了一个新的rails应用程序,并系统地将旧应用程序一块一块地移动到新应用程序中,以尝试找出问题所在
我已经找到了我的定制设计路线
routes.rb
devise_for :users, :path_prefix => 'registration', :controllers => {:registrations => 'users/registrations'}
如果删除:controllers行,则可以使用designe用户编辑表单更新用户名
然而,这不是一个可行的解决办法。Deviate编辑表单只提供名称和电子邮件字段,但在我的用户模型中,用户需要访问其他几个列。因此需要定制路由
到目前为止,我一直在关注这个问题,但我还不确定该去哪里寻找。我尝试将注册控制器编辑为默认值,但没有成功。(我甚至直接从Desive git存储库中剪切粘贴代码)
所以我认为问题不在于控制器
这就离开了形式本身。该表单定义为
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :multipart => true }) do |f| %>
resource\u name,:url=>registration\u path(resource\u name),:html=>{:method=>:put,:multipart=>true})do | f |%>
我看不出这有什么问题。我想不出还有什么地方可以调试这个
总而言之,编辑表单按预期显示,用户可以编辑信息,单击更新,按预期重定向,不显示错误,但不保存编辑的信息。尾部显示未调用任何SQL存储
非常困惑,我很感激任何疯狂的想法或建议
非常感谢尝试在控制台中调试:
require 'pp'
u = User.new
u.save
pp u.errors
这将为您提供阻止用户保存到数据库的错误。请尝试在控制台中进行调试:
require 'pp'
u = User.new
u.save
pp u.errors
这会给你一些错误,这些错误会阻止用户被保存到数据库中。我最终发现这是我的一个愚蠢的疏忽 在我的控制器里
resource.update_attributes!(params[:resource_name])
当我需要的是
resource.update_attributes!(params[resource_name])
我一定是在某个时候编辑的
这是一个自己造成的问题,花了两周的时间才解决 我最终发现这是我一个愚蠢的疏忽 在我的控制器里
resource.update_attributes!(params[:resource_name])
当我需要的是
resource.update_attributes!(params[resource_name])
我一定是在某个时候编辑的
这是一个自己造成的问题,花了两周的时间才解决 @wukerplank谢谢你的提示和(face plant!)如果我记得在禁用验证后重新启动rails控制台,我就不会有问题了!因此,事实证明,我可以在控制台中修改用户,但我不能在应用程序本身中修改用户。尾部日志显示已发布的更新数据,但未运行保存。知道我下一步该去哪里吗?@Andy Harvey要调试这个问题,请在控制器
@user.save中使用
或@user.create代码>这将在您的web浏览器中引发验证错误。@dombesz感谢您的建议。我正在使用.update\u属性。这也行吗?奇怪的是,我收到的唯一信息是“你成功地更新了你的帐户。”但记录肯定没有更新。我已经把一个尾巴的提取物摆在我面前了。我觉得在回形针行之前应该有一个SQL“save”。“但我可能有点不对劲吗?”安迪·哈维·迪瓦特(Andy Harvey Deviate)补充道,你的模型可以访问属性,因此只有某些属性可以更新,其余的被忽略。尝试定义更多属性可访问属性。是<代码>更新属性代码>也应该可以。@dombesz谢谢你的帮助。对于POST中的所有变量,都明确定义了att_可访问性(请参见上面的POST bin链接)。我应该启用其他功能吗?如果其中一个属性不可访问,整个更新是否也会失败?还是仅此属性?我注意到,HTML5日期选择器将每个“DOB”日期元素作为一个单独的属性发布。我应该如何处理这些属性?是:dob足够了,还是我需要启用:dob(2i)等。谢谢helping@wukerplank感谢您的提示和(face plant!)如果我记得在禁用验证后重新启动rails控制台,我就不会有问题了!因此,事实证明,我可以在控制台中修改用户,但我不能在应用程序本身中修改用户。尾部日志显示已发布的更新数据,但未运行保存。知道我下一步该去哪里吗?@Andy Harvey要调试这个问题,请在控制器@user.save中使用
或@user.create代码>这将在您的web浏览器中引发验证错误。@dombesz感谢您的建议。我正在使用.update\u属性。这也行吗?奇怪的是,我收到的唯一信息是“你成功地更新了你的帐户。”但记录肯定没有更新。我已经把一个尾巴的提取物摆在我面前了。我觉得在回形针行之前应该有一个SQL“save”。“但我可能有点不对劲吗?”安迪·哈维·迪瓦特(Andy Harvey Deviate)补充道,你的模型可以访问属性,因此只有某些属性可以更新,其余的被忽略。试着去做