【问题标题】:Debugging why a create method is not saving to the model调试创建方法未保存到模型的原因
【发布时间】:2013-03-01 10:55:03
【问题描述】:

我有这个方法,在 rake 任务之后应该将我的数据保存到模型中,我试图一次更新 2 列,这应该不是问题

  def update_fixtures #rake task method
   Fixture.destroy_all
   get_home_fixtures.each {|home| Fixture.create!(home_team: home )}
   get_away_fixtures.each {|away| Fixture.create!(away_team: away )}
  end

在这种情况下,只有客队会拯救,但是如果我这样做

  def update_fixtures #rake task method
     Fixture.destroy_all
     get_away_fixtures.each {|away| Fixture.create!(away_team: away )}
     get_home_fixtures.each {|home| Fixture.create!(home_team: home )}
  end

那么只有主队会扑救。

我尝试了@model.errors.full_messages,但得到了 nil 类的未定义方法,所以没有?

我正在尝试调试此问题,但不确定我可以使用什么来查找问题

以前有人经历过吗?把我逼疯了

编辑

我可以从控制台手动更新该字段,所以当我这样做时

Fixture.create(:away_team => "String")

更新正常

谢谢

【问题讨论】:

    标签: ruby-on-rails-3 debugging activerecord methods rake-task


    【解决方案1】:

    当您使用#create! 时,如果保存失败,它应该会抛出错误,这应该意味着您没有尝试保存任何内容(空数组)。

    验证

    get_away_fixtures
    get_home_fixtures
    

    看起来像你期望的那样。安装debugger并在Fixture.destroy_all之后添加。

    【讨论】:

    • 哪里会产生错误,就像你说的那样创建!应该抛出一个错误
    • 当方法被调用时。您正在运行一些调用该方法的 rake 任务,对吗?当该任务调用该方法时,错误应该中止任务并显示堆栈跟踪。
    • 啊对,不,它不会那样做,它会完成 rake 任务并填写主队或客队信息,这取决于我有哪些方法,即 get_home_fixtures跨度>
    • 我仍然建议将调试器投入其中,检查 get_away_fixtures 和 get_home_fixtures 包含的内容并手动运行其余方法。
    • 我已经接受了答案,因为调试器是一个很好的工具,关于为什么这两种方法都没有写入模型,这是因为我发现一个创建覆盖了另一个,这现在很有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多