Rails控制器不接受JSON?

apc*_*ter 8 javascript json ruby-on-rails

我试图通过JSON请求创建一个ActiveRecord对象.但是,控制器无法设置新创建的对象中的参数中传递的变量.例如,person对象有两个字段:firstname和lastname.

JSON.org库的JSON.stringify函数生成的JSON生成:

{"firstname" : "Joe" , "lastname" : "Bloggs"}
Run Code Online (Sandbox Code Playgroud)

但是,控制器期望JSON采用以下形式:

{ "Person" : {"firstname" : "Joe" , "lastname" : "Bloggs"} }
Run Code Online (Sandbox Code Playgroud)

我知道在正常的事件过程中(对于HTTP请求),请求的参数嵌套在正在创建的模型的类名下.

控制器中的create动作是:

def create
    @person = Person.new(params[:person])

    respond_to do |format|
      if @person.save
        flash[:notice] = 'Person was successfully created.'
        format.html { redirect_to(@person) }
        format.xml  { render :xml => @person, :status => :created, :location => @person }
        format.json  { render :json => @person, :status => :created, :location => @person }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @person.errors, :status => :unprocessable_entity }
        format.json  { render :json => @person.errors, :status => :unprocessable_entity }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

控制器处理生成的JSON请求的最佳方法是什么?或者,如何从Javascript对象生成"正确"的JSON以传递给控制器​​?

TIA,亚当

Zac*_*ley 4

如果您只是传递所有 person 参数的哈希值(而不是以“person”作为键的嵌套哈希值),那么您应该能够执行@person = Person.new(params).