7 Stimmen

Ruby-Formular mit Ajax unter Verwendung von remote: true gibt einen ActionController::InvalidAuthenticityToken Fehler zurück. Die klassische Übermittlung tut dies nicht.

Ich schreibe eine Chat-Seite für eine RoR-Website. Ich habe alles in HTML ausgearbeitet und versuche es mit Ajax zu implementieren. Es gibt ein Formular zur Übermittlung von Nachrichten. Das Formular liest <%= form_for(@chat, remote: true, :authenticity_token => true) do |f| %>

Meine gesamte Ansicht:

        Battleriskopoloy - Kommunikation

            [ . . . Kommunikation . . . ]

            <% $chat_users.each do |user| %>
            <% user = User.find_by_username(user) %>
            <%= button_to user.username, flop_chat_path(user), :class => "select", :method => :get  %>
            <% end %>

            <% $messeges.each do |i| %>
                <% if i[1] == "from" %>
                <%= i[0] %>

                <% else %>
                <%= i[0] %>

                <%end%>
            <%end%>

            <%= form_for(@chat, remote: true, :authenticity_token => true) do |f| %>
            <%= f.text_field :content, id: "compose" %>

            <%= f.submit "Nachricht senden", id: "submit" %>
        <% end %>

Der Controller:

class ChatsController < ApplicationController
     $messeges = Array.new(10, " ")
def new
    $messeges = Array.new
    if $ruser != nil
    $messeges = Array.new
    Chat.all.each_with_index do |i, index|
        if i.recipient == current_user.id && i.sender == $ruser.id
            $messeges.push([i.content, "to"])
        end
        if i.recipient == $ruser.id && i.sender == current_user.id
            $messeges.push([i.content, "from"])
        end
    end
    end
    $chat_users = Array.new
    User.all.each do |user|
        if user != nil && current_user != nil
        if user.game_id == current_user.game_id && user.id != current_user.id
            $chat_users.push(user.username)
        end
        end
    end
    @chat = Chat.new
end

def create
    if $ruser != nil
    @chat = Chat.new(chat_params)
    @chat.recipient = $ruser.id
    @chat.sender = current_user.id
    @chat.save
    end
    redirect_to "/comms/new"
end

def flop
    $ruser = User.find(params[:id])
    $messeges = Array.new
    Chat.all.each_with_index do |i, index|
        if i.recipient == current_user.id && i.sender == $ruser.id
            $messeges.push([i.content, "to"])
        end
        if i.recipient == $ruser.id && i.sender == current_user.id
            $messeges.push([i.content, "from"])
        end
    end
    redirect_to "/comms/new"
end

private
    def chat_params
        params.require(:chat).permit(:content)
    end
end

Zusätzlich habe ich <%= csrf_meta_tags %> in meiner application.html.erb

Ich habe online einige andere Dinge gefunden, bei denen Leute den gleichen Fehler mit Rails 4 erhalten haben, wenn sie von Ajax zur HTML-Übermittlung wechseln, aber das schien nur daran zu liegen, dass der :authenticity_token => true Parameter nicht enthalten war. Jede Hilfe wird sehr geschätzt.

9voto

techdreams Punkte 4903

Nach Standard ist authenticity_token auf false gesetzt. Daher müssen Sie diese Zeile in Ihrer application.rb hinzufügen

config.action_view.embed_authenticity_token_in_remote_forms = true

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X