7

これは何度か私を混乱させ、そのたびにインターネットや World Wide Web で適切な答えを見つけるのに苦労しました。私のjavascriptファイルに変数があるとしましょう

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. このようなフロントエンドのものをバックエンドの任意のルートに送信できますか?

とても有難い。

4

1 に答える 1

8

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

ただし、これは応答で新しいアクション ビューの本文も返します。これを使用して、ダイアログなどのためにそのページを非同期にプルする場合に必要になる場合があります。

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

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

ビュー内の js:

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

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

routes.rb で:

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

posts_controller.rb:

def create
  post = Post.new(params[:myLoc])
  if post.save!
    render :status => 200
  else
    # exception handling
  end
end
于 2013-10-31T05:47:37.877 に答える