2016-10-21 2 views
0

Ich habe eine Rails 5 App (API-Modus). Ich boote eine Flag-Kommentar-Funktion. Ich habe ein Flag-Attribut und ein deaktiviertes Attribut zu meiner Kommentartabelle hinzugefügt (weil ich Kommentare nicht vollständig zerstören will, nur um sie auf der Vorderseite zu verstecken, wenn sie deaktiviert ist).Ich kann keine Update-Aktion an meine API von einer E-Mail senden

Wenn ein Kommentar markiert ist, sende ich eine E-Mail (über ActionMailer) an mich mit dem Kommentar, einigen Metadaten darüber und einem Link, um das deaktivierte Attribut auf "true" zu setzen.

Mein Problem ist, dass wenn ich diesen Link auf meine E-Mail klicke, das Attribut nicht aktualisiert wird. Hier

ist der Code, um klarzustellen:

routes.rb:

resources :comments, only: [:create, :update] do 
    member do 
    post 'flag' 
    end 
end 

Controller/api/v1/comments_controller.rb:

def update 
    @comment = Comment.find(params[:id]) 
    new_status = @comment.disabled ? false : true 

    # binding.pry => I'm not even reaching that method 

    if @comment.update(disabled: new_status) 
     CommentDisabledMailer.send_comment_disabled_confirmation(@comment).deliver_now 
     redirect_to "https://media.giphy.com/media/YfGkjrnVIk3jq/giphy.gif" # a funny gif url 
    else 
     render json: { errors: @comment.errors.messages }, status: :unprocessable_entity 
    end 
end 

def flag 
    @comment.update(flagged: @comment.flagged + 1) 
    render json: @comment, serializer: Api::V1::CommentSerializer, status: 201, root: nil 
    FlagMailer.send_flag_mail(@comment).deliver_now 
end 

views/flag_mailer/send_flag_mail .html.erb:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    </head> 
    <body> 
    <!-- some meta data about my comment --> 

    <h2> <%= link_to "Disabled this comment", api_v1_comment_url(@comment), method: :put, action: :update %> </h2> 

    </body> 
</html> 

Ich erhalte die E-Mail, wenn ich den Kommentar über den Postboten auszeichne, das markierte Attribut wird aktualisiert, aber wenn ich auf "E-Mail deaktivieren" klicke, öffnet sich ein neues Fenster mit einem Fehler: No route matches [GET] "/api/v1/comments/5", das deaktivierte Attribut von Der Kommentar wird nicht aktualisiert und ich erhalte offensichtlich keine E-Mail, die bestätigen sollte, dass der Kommentar deaktiviert wurde (siehe update Methode im Controller).

Fehle ich etwas?

+1

Ihre Route eine POST-Route ist. Rails verwendet normalerweise JS, um "link_to (...) Methode:: post" durch ein Formular zu ersetzen, das beim Klicken gesendet wird (normale Links machen immer GET-Anfragen), aber Ihr Link wird außerhalb des Anwendungskontextes in einer E-Mail angezeigt , also findet keine unaufdringliche Javascript-Magie von Rail statt. Überprüfen Sie die Antworten auf diese Frage, die erklären, warum Put/Post-Anfragen in einer E-Mail nicht funktionieren: http://stackoverflow.com/questions/25573000/rails-3-2-link-to-in-email-with-method- put-still-producing-get-Anfrage – omnikron

Antwort

0

können Sie versuchen, diese

<a href="<%= api_v1_comment_url(@comment) %>" data-method="put">Disabled this comment</a> 
Verwandte Themen