2014-06-20 8 views
7

değil RoR sitesi için bir sohbet sayfası yazıyorum. Hepsini HTML'de yaptım ve ajax ile uygulamaya çalışıyorum. Mesajların sunulması için bir form var.Uzaktaki ajax kullanarak Ruby formu: true ActionController :: InvalidAuthenticityToken hatası verir. Klasik gönderi

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Battleriskopoloy - Communications</title> 
    </head> 
    <body> 
     <br> 
     <div id="heading_1" align="center"> 
      <br><span id="title"><strong>[ . . . Communications . . . ]</strong></span> 
     </div><br> 
     <div id="sidebar"><br> 
      <% $chat_users.each do |user| %> 
      <% user = User.find_by_username(user) %> 
      <%= button_to user.username, flop_chat_path(user), :class => "select", :method => :get %> 
      <% end %> 
     </div> 
     <div id="display"> 
      <% $messeges.each do |i| %> 
       <% if i[1] == "from" %> 
       <p style="color:#000000; text-align:right; margin-right:5%;font-family:courier"><%= i[0] %></p> 
       <br> 
       <% else %> 
       <p style="color:#FF0000; text-align:left; margin-left:5%; font-family:courier"><%= i[0] %></p> 
       <br> 
       <%end%> 
      <%end%> 
     </div> 
     <div id="textfield"> 
      <%= form_for(@chat, remote: true, :authenticity_token => true) do |f| %> 
      <%= f.text_field :content, id: "compose" %> 
      <br> 
      <br> 
      <%= f.submit "Send Messege", id: "submit" %> 
     <% end %> 
     </div> 
    </body> 
</html> 

kontrolör: Ek

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 

, benim application.html.erb içinde <%= csrf_meta_tags %> var ben bulmuştu

bazı form etiketi <%= form_for(@chat, remote: true, :authenticity_token => true) do |f| %>

Benim tüm görünüm okur ajax'ten html gönderimine geçiş yaparken aynı hataları alan kişilerle ilgili diğer şeyler çevrimiçi. dahil :authenticity_token => true parametresi yoktu. Herhangi bir yardım büyük beğeni topluyor.

cevap

7

authenticity_token varsayılan olarak false olarak ayarlanmıştır. Yani bu proje için kaynak an nerede olduğunu bile bilmiyorum senin application.rb

config.action_view.embed_authenticity_token_in_remote_forms = true 
+1

bu satırı ekleyin gerekir. Kesinlikle pes ettiğimi hatırlıyorum. Gerçekten cevabı takdir et! – obventio56

+1

@techdreams neden rayların bu özelliği taşıyorsa false bydefault – wasipeer