7

这让我在几个不同的场合感到困惑,每次我都很难在互联网或万维网上找到一个好的答案。假设在我的 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 中的数据作为 a 发送,当您的控制器解析它并创建帖子时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 回答