来自json的Angular2 Rails Backend Post

时间:2016-01-31 01:30:11

标签: ruby-on-rails angularjs json angular

我理解它的方式是,如果您指定了正确的内容标头,那么Rails将以其期望的格式自动构建params散列。但是,我的params哈希有一些......好吧......问题。这里有一些信息

Angular 2 http请求

onSubmit(values:any) : void {

  var headers = new Headers();
  headers.append('Content-Type', 'application/json');

  this.http.post("http://localhost:3000/people/",JSON.stringify(values),{ headers: headers })
    .subscribe((res: Response) => {
      this.data = res.json();
      this.loading = true;
  });
}

Rails会接收请求,但会错误地格式化请求数据。这是我的rails创建方法。

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

  puts params[:person] # writes to Console

  if @person.save
     render json: @person
  end
end

来自我的puts声明

的rails调试器中的信息
Parameters: {"name"=>"Christopher", "age"=>"37", "person"=>{"name"=>"Christopher", "age"=>"37"}}

和剩下的错误:

Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.0ms)

NoMethodError (undefined method `call' for #<Person:0x007fec515761c0>):
app/controllers/people_controller.rb:16:in `create'

除了星期六晚上的节目外,我做错了什么?

2 个答案:

答案 0 :(得分:3)

我想这个

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

不应该有额外的.而是

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

答案 1 :(得分:0)

除了Miles上面提到的拼写错误之外,主要问题在于我错误地使用了强参数。

我这样做了:

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

而不是:

@person = Person.new(person_params)