【问题标题】:Create a record in Rails from AngularJS从 AngularJS 在 Rails 中创建记录
【发布时间】:2014-07-31 19:24:08
【问题描述】:

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

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 表明问题是必须将散列作为参数传递。

我在这里错过了什么?

【问题讨论】:

    标签: javascript ruby-on-rails ruby angularjs


    【解决方案1】:

    您正在接收这些参数:

    Parameters: {"saved_query"=>"1"}
    

    即,params[:saved_query] 返回"1"。因此,当你这样做时

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

    你真的在做

    @saved_query = SavedQuery.new("1")
    

    这是行不通的,因为SavedQuery.new 期望的是Hash,而不是String

    如果你这样做

    @saved_query = SavedQuery.new(params)
    

    它应该可以工作。

    【讨论】:

    • 太棒了!虽然现在我得到“ActiveModel::ForbiddenAttributesError”
    • 你现在遇到了 Rails 的strong parameters。您应该能够在谷歌上找到一些解释。
    【解决方案2】:
    @saved_query = SavedQuery.new(params[:saved_query])
    

    您在SavedQuery 上的.new 本质上是在调用SavedQuery.new("1"),Rails 遇到了值没有键的问题。

    SavedQuery.new() #=> if no values are required

    SavedQuery.new(age:1) #=> if there is an int column within the SavedQuery model, for example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2021-12-31
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多