2017-09-19 4 views
0

Je souhaite mettre à jour les status des notifications à read chaque fois que je veux que l'utilisateur clique sur la liste déroulante de notification de l'application.Rails 4 déclenche ArgumentError (mauvais nombre d'arguments (2 pour 1)): lors de la mise à jour par AJAX POST

Voici le code du contrôleur:

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 

et le code jQuery qui devrait déclencher la méthode create pour le contrôleur:

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

Malheureusement, il retourne cette erreur:

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' 

Répondre

0

Modifiez votre méthode create à ceci:

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

Cela a fonctionné! Merci beaucoup :) Sera choisi comme la réponse acceptée dans 10 minutes –

+0

heureux de vous aider) – cnnr