3

提交表单后,我的调试功能中会显示正确的自定义参数,但是当我进入控制台时会显示默认参数。

控制器

def update
    current_user.update_attributes(params[:user])
    flash[:success] = "Your settings have been saved!"
    render new_status_update_path
end                                         

模型

attr_accessible :deficit_pct,
              :target_bf_pct,
              :activity_factor

笔记:

  • 我能在 SO 上找到的最接近的问题是改变通过关联存在的对象的属性的问题。

  • 我尝试使用 Object.update 方法,尽管我收到一条错误消息:

    调用私有方法“更新”#

有任何想法吗?

谢谢!

4

4 回答 4

4

试试代码:-

def update
    if current_user.update_attributes(params[:user])
        flash[:success] = "Your settings have been saved!"
        render new_status_update_path
    else
        p 111111111111
        p  current_user.errors.inspect
    end
end

在检查您的日志是否有任何错误之后。该活动记录的存在

于 2013-01-01T17:08:41.677 回答
3

在控制台中玩过之后,我发现即使我手动更改属性,在我退出控制台后属性也不会“粘住”。

所以我将进入控制台,更改用户属性,测试它们,它们将被更改。如果我存在并重新输入,那么测试它们,它们将恢复为默认值。

这使我相信用户模型中设置其默认值的“after_initialize”方法在每次保存后运行。我虽然它只会在第一次单独保存对象后运行,但现在我知道它每次保存时都会运行。

after_initialize :default_values 

def default_values
  self.goal = "Cut"
  self.measurement = "US"
  self.bmr_formula = "katch"
  self.fat_factor = 0.655
  self.protein_factor = 1.25 
  self.deficit_pct = 0.10
  self.target_bf_pct = 0.10
  self.activity_factor = 1.3
end

一旦我删除了所有这些值和 after_initialize 方法,它就会永久保存。

于 2012-12-31T00:31:07.297 回答
1

就像是:


def update
    if current_user.update_attributes(params[:user])
        flash[:success] = "Your settings have been saved!"
        render new_status_update_path
    else
        some_error_handling_code
    end
end

保存失败时不会显示成功。作为一般规则,您应该在向最终用户报告成功之前检查保存或任何其他后端操作是否失败。

于 2012-12-30T21:10:54.300 回答
1

您应该确保没有任何验证错误。您可以使用以下方法检查它们:

active_record_model.errors

在你的情况下,这将是

current_user.errors

此外,您应该打印返回值 fromupdate_attributes以查看它是true还是false。如果得到false,则保存被取消。这很可能是由验证错误或回调返回引起的false

于 2012-12-30T19:43:56.163 回答