Javascript 从AngularJS在Rails中创建记录

Javascript 从AngularJS在Rails中创建记录,javascript,ruby-on-rails,ruby,angularjs,Javascript,Ruby On Rails,Ruby,Angularjs,我有一个Angular应用程序,它向rails服务器发送http请求。我想请求创建一条记录(在savedquerys表中) Angular应用程序现在实际上正在发出一个非常简单的http请求,比如 $.post('http://10.241.16.159:3000/api/save_query', {'saved_query':1}); 该javascript请求被路由到此Rails操作: def create @saved_query = SavedQuery.new(params[:

我有一个Angular应用程序,它向rails服务器发送http请求。我想请求创建一条记录(在savedquerys表中)

Angular应用程序现在实际上正在发出一个非常简单的http请求,比如

$.post('http://10.241.16.159:3000/api/save_query', {'saved_query':1}); 
该javascript请求被路由到此Rails操作:

def create
  @saved_query = SavedQuery.new(params[:saved_query])

  if @saved_query.save
    render json: @saved_query, status: :created, location: @saved_query
  else
    render json: @saved_query.errors, status: :unprocessable_entity
  end
end
但是,rails服务器没有返回适当的json,而是记录了一个500错误:

Started POST "/api/save_query" for 172.25.82.146 at 2014-07-31 19:14:06 +0000
Processing by SavedQueriesController#create as */*
  Parameters: {"saved_query"=>"1"}
Completed 500 Internal Server Error in 0ms

ArgumentError (When assigning attributes, you must pass a hash as an argument.):
  app/controllers/saved_queries_controller.rb:21:in `create'
所以我的问题是,通过查看Rails服务器的日志,我们可以清楚地看到传递的参数是散列,但是抛出的ArgumentError表示问题是散列必须作为参数传递

我错过了什么

@saved_query = SavedQuery.new(params[:saved_query])
您在
SavedQuery
上的
.new
实际上是在调用
SavedQuery.new(“1”)
,Rails的值没有键存在问题

SavedQuery.new()#=>如果不需要任何值

SavedQuery.new(年龄:1)#=>如果SavedQuery模型中有int列,例如

您在
SavedQuery
上的
.new
实际上是在调用
SavedQuery.new(“1”)
,Rails的值没有键存在问题

SavedQuery.new()#=>如果不需要任何值


SavedQuery.new(年龄:1)#=>如果SavedQuery模型中有一个int列,例如

您将收到以下参数:

Parameters: {"saved_query"=>"1"}
即,
params[:saved_query]
返回
“1”
。因此,当你

@saved_query = SavedQuery.new(params[:saved_query])
你真的在做什么

@saved_query = SavedQuery.new("1")
这是行不通的,因为
SavedQuery.new
需要的是
散列,而不是
字符串

如果你这样做了

@saved_query = SavedQuery.new(params)

它应该可以工作。

您将收到以下参数:

Parameters: {"saved_query"=>"1"}
即,
params[:saved_query]
返回
“1”
。因此,当你

@saved_query = SavedQuery.new(params[:saved_query])
你真的在做什么

@saved_query = SavedQuery.new("1")
这是行不通的,因为
SavedQuery.new
需要的是
散列,而不是
字符串

如果你这样做了

@saved_query = SavedQuery.new(params)

它应该能用。

太棒了!虽然现在我得到了“ActiveModel::ForbiddenAttributeError”,但“您现在正在运行Rails”。你应该可以在谷歌上找到一些解释。太棒了!虽然现在我得到了“ActiveModel::ForbiddenAttributeError”,但“您现在正在运行Rails”。你应该可以在谷歌上找到一些解释。