Javascript 从AngularJS在Rails中创建记录
我有一个Angular应用程序,它向rails服务器发送http请求。我想请求创建一条记录(在savedquerys表中) Angular应用程序现在实际上正在发出一个非常简单的http请求,比如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[:
$.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”。你应该可以在谷歌上找到一些解释。