Rails 4 引发 ArgumentError(参数数量错误(2 对 1)):通过 AJAX POST 更新时

Posted

技术标签:

【中文标题】Rails 4 引发 ArgumentError(参数数量错误(2 对 1)):通过 AJAX POST 更新时【英文标题】:Rails 4 raises ArgumentError (wrong number of arguments (2 for 1)): when updating through AJAX POST 【发布时间】:2018-02-27 23:02:34 【问题描述】:

每当我希望用户点击应用的通知下拉菜单时,我想将通知的status 更新为read

这是控制器代码:

class Api::V1::NotificationsController < ApiController
  before_action :authenticate_user!

  def index
    @notifications = Notification.where(user_id: current_user.id).order(created_at: :desc)

    render_success @notifications
  end

  def create
    Notification.update_all(status: "read", user_id: current_user.id)
  end

end

以及应该为控制器触发create 方法的jQuery 代码:

$('.notifications-menu').on('shown.bs.dropdown', function () 
  console.log('Opened notifications');
  $.post('/api/v1/notifications');
)

不幸的是,它返回了这个错误:

Started POST "/api/v1/notifications" for ::1 at 2017-09-19 16:27:53 +0800
Processing by Api::V1::NotificationsController#create as */*
  User Load (0.6ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 13]]
Completed 500 Internal Server Error in 6ms (ActiveRecord: 0.6ms)

ArgumentError (wrong number of arguments (2 for 1)):
  app/controllers/api/v1/notifications_controller.rb:11:in `create'

【问题讨论】:

【参考方案1】:

将您的 create 方法更改为:

def create
  Notification.update_all(status: "read", user_id: current_user.id)
end

【讨论】:

成功了!非常感谢 :) 会在 10 分钟内选择这个作为接受的答案 很高兴为您提供帮助)

以上是关于Rails 4 引发 ArgumentError(参数数量错误(2 对 1)):通过 AJAX POST 更新时的主要内容,如果未能解决你的问题,请参考以下文章

Rails 2.4 => 3.0:ActiveRecord:`add_modifier`:参数数量错误(给定 3,预期 2)(ArgumentError)

Rails 执行迁移 ArgumentError

Rails::MailersController#preview 中的 ArgumentError

ArgumentError:升级 Rails 6.1.3 时出现错误数量的参数错误

Rails Draper 的装饰器导致 ArgumentError

Rails - 使用ActiveRecord :: Enum时的ArgumentError