2016-08-30 7 views
1

リアルタイムアプリについて学ぶために、Entangledを使用して基本的なメッセージボードを作成しようとしています。私のAngularアプリは、私のEntangleレールコントローラにパラメータを送信しないのはなぜですか?

私はAngularアプリと、Entangled :: Controllerを含むMessages Controllerを備えたRailsバックエンドを持っています。このRailsコントローラは、Angularアプリケーションからフォームが送信されたときにリクエストを受信します。フォームはEntangledを使用して送信されます。 (サブミットをクリックすると、Angularコントローラで関数が起動され、バックエンドに新しいメッセージが作成され、そのバックエンドに登録されているすべてのクライアントが更新されます)。

SubmitをクリックするとAngular関数がトリガされます関数がフォームから正しい情報を受け取ることを知ってください:console.log($scope.message){socket: "ws://message-board-olliehm.c9users.io:8080/messages", username: "ggg", content: "gggggg"}と表示され、ユーザフィールドに「ggg」、コンテンツフィールドに「gggggg」と表示されます。

問題は、これらのフィールドがRailsコントローラに到達していないことです。サブミットをクリックすると、正しいアクションがRailsコントローラでトリガされますが、パラメータには適切な情報が含まれません。def createには{"controller"=>"messages", "action"=>"create"}の "メッセージ"ハッシュと "ユーザ名"または "コンテンツ"キーはありません。

私はEntangledがユーザー名とコンテンツのフィールドで何をしているのか分かりません。

Redisは私には新しく、問題があるかどうかはわかりません。私はRedisをインストールし、Redis-serverはEntangledの必要に応じて実行しています。

$redis = Redis.new(:host => $IP, :port => 6379) 

はここに私の角度コントローラです:私はRailsのコンソールで正常に接続すると、私は、データベース内のデータを入れさせるされ、以下のようにRedisの初期化子を持ってここに

var controllers = angular.module('controllers'); 

controllers.controller('MessageboardController', ['$scope','Message', function($scope,Message){ 

    $scope.message = Message.new(); 

    $scope.post = function() { 
    console.log($scope.message); 
    $scope.message.$save(function() { 
     $scope.$apply(function() { 
     $scope.message = Message.new(); 
     }); 
    }); 
    }; 

    Message.all(function(err, messages) { 
    $scope.$apply(function() { 
     $scope.messages = messages; 
    }); 
    }); 

}]); 

メッセージは、この工場を指し、 :

messageboard.factory('Message', function(Entangled){ 
    return new Entangled('ws://message-board-olliehm.c9users.io:8080/messages'); 
}); 

そして、ここに私の角度ビューです:

<h1>Messageboard</h1> 

<section class='row' ng-if='messages'> 
    <ul> 
    <li ng-repeat='message in messages'> 
     {{message.username}} 
     {{message.content}} 
    </li> 
    </ul> 
</section> 

<section class='row'> 
    <form ng-submit="post()"> 
    <div class='form-group'> 
     <label for='username'>Message as</label> 
     <input ng-model='message.username' name='username' type='text'> 
    </div> 
    <div class='form-group'> 
     <input ng-model='message.content' name='message' type='text' placeholder='Write your message here'> 
    </div> 
    <div class='form-group'> 
     <input type="submit"> 
    </div> 
    </form> 
</section> 

アドバイスは非常に高く評価されています。これは長期的な不満をもたらし、リアルタイム更新で何かを作成することに非常に熱心です。

+0

私は今リアルタイムアップデートを行っていますが、角形フォームはまだパラメータを提出していませんすべてのメッセージが空白になります。形式: <形式ng-submit = "addMessage(メッセージ)"> 私はコンソールです。このメッセージの引数を記録すると、 (e {socket: "ws://message-board-olliehm.c9users.io:8080/messages"、username: "o"、content: "o"}) オブジェクトを詳細に表示するには、小さな矢印をクリックすると実際にユーザー名とコンテンツが「null」になります。 –

答えて

1

多くの試行錯誤の後、私はバックエンドコントローラによって明らかに受け取られた空のパラメータが誤解を招くことに気付きました。 paramsが適切に到着し、私は生に次の操作を行い、コントローラが受け取るのparams新しいメッセージオブジェクトが作成され、限り放送されている:

params.require(:message).permit(:content,:username) 

つまり、あなたがフォームのparamsは、あなたと到着をどうしたいまさに」期待しています。私にとって奇妙なことは、あなたが上記のようにハッシュを要求するまで、paramsは 'メッセージ'ハッシュを含まないということでした。私はこれが通常のHTTPリクエストではないことと関係していると思いますが、適切な説明をいただければ幸いです。

関連する問題