【问题标题】:Rails 4 wrong number of arguments (1 for 2) error for updateRails 4错误的参数数量(1代表2)更新错误
【发布时间】:2015-10-24 18:43:41
【问题描述】:

我确定这是我没有看到的小东西,但是当我尝试通过表单在 rails 4 中更新信息时,我得到的参数数量错误(1 比 2)。

这是我的控制器操作:

def update
    @lion = Lion.find(params[:id])
    @lion = Lion.update(lion_params)
    redirect_to lion(@lion)
end

这是该控制器的私有方法中的 lion_params

def lion_params
     params.require(:lion).permit(:name, :about, :weight, :health, :health_notes, :photo_url, :trainer_id)
end

所有信息都显示在表单中,所以我不太确定这个错误来自哪里。

【问题讨论】:

  • 我感觉你的意思是 @lion.update(lion_params) 而不是 @lion = Lion.update(lion_params)
  • 我的。我不知道更糟的是,犯了愚蠢的错误,或者看了很多遍却没有抓住它。哈哈。感谢您的新鲜眼睛! :)
  • 作为一个离题的评论,在编写 Ruby 代码时,您可能希望坚持使用 2 个空格缩进。这就是 Ruby 社区中使用的东西。
  • 也感谢您指出这一点,我确实想遵循惯例和最佳实践:)

标签: ruby-on-rails forms


【解决方案1】:

您想在@lion 上使用update_attributes,而不是`更新:

# The bang `!` is used to raise in case of validation errors
@lion.update_attributes!(lion_params)

查看this article,它解释了 update、update_all、update_attribute、update_attributes 之间的所有区别

还要确保你的最后一行是redirect_to lion_url(@lion)(lion() 不存在),使用_url 方法很重要,因为它遵循HTTP specifications

【讨论】:

  • 谢谢 :) Justin Wood 发现了错误(他在评论中做出了回应,但我无法将其标记为已回答),但我非常感谢该链接,并且一定会查看 update_attributes!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多