2013-10-31 18 views
7

これは、いくつかの異なる機会に私を混乱させ、インターネットやワールドワイドウェブで良い答えを見つけるのに苦労します。私のjavascriptファイルに変数があるとしましょう。jQuery ajaxを使用して、データをparamsでレールバックエンドに送信します。

var myLoc = { lat: 35, lon: -110 } 

ジオロケーションを使用して取得したものはありません。この情報をバックエンドに送信して、作成する特定の投稿と関連付ける必要があります。

は私のルートがちょうどこのされていると仮定します

resources :users do 
    resources :posts 
end 

これが正しい方法ですが、何気になることは、このようなものであれば、私は知らない。

$.get('/users/' + JSON.stringify(myLoc) + '/posts/new', function() {console.log("please work")}); 

私の質問があります:

A.これは機能しますか?
B.これは正しい方法ですか?
C.このようなフロントエンドのものをバックエンドのどのルートにも送信できますか?

非常に高く評価されています。

+0

'A.'あなたは一種の持っています正しい考え。 'B.'いいえ、APIの名前空間とあなたのレールアプリ内のルートを指定する必要があります。理想的には、APIがJSONを使用したjQuery AJAXリクエストに応答することが理想的です。 '$ .get'も間違って使用しています。そのjQueryメソッドのドキュメントを読んでください。 'C.'はい。しかし、ルートはそれを好まないかもしれません。答えは 'B'です。 –

+0

APIネームスペースはどのように機能しますか?あなたはその情報の良いリンクを持っていますか? – natecraft1

答えて

8

クエリ文字列を使用してgetでページに情報を送信すると、最終的に作成アクションにフォームが送信されるnewビューのフィールドにデータを入力できます。

しかし、これはレスポンス内の新しいアクションビューの本体も返します。このアクションビューを使用して、ダイアログや何かのためにそのページを非同期的にプルする場合に便利です。

投稿を作成するためにこのajax呼び出しを使用している場合は、投稿コントローラのpostから/createアクションへの方が良いかもしれません。

JSONでデータをpostとして送信すると、コントローラが解析して投稿を作成するときにオブジェクトがparamsハッシュに変換されます。ビュー内の

JS:routes.rbを中

var url = '/users/' + userId + '/posts/create'; 
var myLoc = { 'lat': 35, 'lon': -110 }; 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: myLoc 
}); 

:posts_controller.rbで

match 'users/:user_id/posts/create' => 'posts#create', :via => :post 

def create 
    post = Post.new(params[:myLoc]) 
    if post.save! 
    render :status => 200 
    else 
    # exception handling 
    end 
end 
+1

URLに明示的に '作成'を指定する必要はありません。/users/user_id/postsへのPOSTリクエストはposts_controller.rbの 'create'メソッドにマップされます –

+0

ああ、あなたは正しい!これは以下のようなリソースルーティングの特徴です:http://guides.rubyonrails.org/routing。html#crud-verbs-and-actions –

+0

これは何を意味するのですか?しかし、これはレスポンスの新しいアクションビューの本体を返します。これを使用して、そのページを非同期的にダイアログや何かのために。どのようなルートでもこのような情報を送信できますか?たとえパラメータがなくても、例えば '/ show_posts'を得る? – natecraft1

関連する問題