【问题标题】:Why does my record have all nil fields after being saved?为什么我的记录保存后全是零字段?
【发布时间】:2018-08-28 22:13:30
【问题描述】:

我正在制作一个 ember 和 rails 应用程序。

我正在尝试向http://localhost:3000/candidates 发送帖子请求

我的请求是 200 并且正在创建记录,但一切都是零: 这是为什么呢?

#<Candidate id: 15, name: nil, email: nil, created_at: "2018-08-23 22:28:07", updated_at: "2018-08-23 22:28:07"> 

这是我的控制器代码:

class CandidatesController < ApplicationController
  # POST /candidates
  # def create
  #   @candidate = Candidate.create!(candidate_params)
  #   json_response(@candidate, :created)
  # end

  def create
    puts "create"
    puts params
    puts candidate_params
    candidate = Candidate.create!(candidate_params)

    if candidate.save
      render jsonapi: candidate
    else
      render jsonapi_errors: candidate.errors
    end
  end

  private

  def candidate_params
    # whitelist params
    params.permit(:name, :email)
  end
end

这是我的余烬代码:

import Ember from "ember";

export default Ember.Route.extend({
  model() {
    // return this.get("store").findAll("candidate");
  },
  actions: {
    createCandidate() {
      console.log("create candidate");
      let candidate = this.get("store").createRecord("candidate", {
        id: 1,
        name: "Katie",
        email: "katie@gmail.com"
      });
      candidate.save();
    }
  }
});

我的 js 控制台中也出现此错误: SyntaxError:JSON 输入意外结束

我正在使用“jsonapi-rails”gem

这里是服务器日志和网络标签的屏幕截图:

NetworkScreenshot

Started POST "/candidates" for 127.0.0.1 at 2018-08-29 14:07:12 +0100
Processing by CandidatesController#create as application/vnd.api+json
create
{"controller"=>"candidates", "action"=>"create"}
{}
   (2.7ms)  begin transaction
  ↳ app/controllers/candidates_controller.rb:12
  Candidate Create (0.4ms)  INSERT INTO "candidates" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2018-08-29 13:07:12.984174"], ["updated_at", "2018-08-29 13:07:12.984174"]]
  ↳ app/controllers/candidates_controller.rb:12
   (1.3ms)  commit transaction
  ↳ app/controllers/candidates_controller.rb:12
   (0.1ms)  begin transaction
  ↳ app/controllers/candidates_controller.rb:14
   (0.0ms)  commit transaction
  ↳ app/controllers/candidates_controller.rb:14
Completed 200 OK in 9ms (Views: 0.1ms | ActiveRecord: 4.5ms)

这是我的适配器:

import DS from "ember-data";

export default DS.JSONAPIAdapter.extend({
  host: "http://localhost:3000",
  dataType: "json"
});

我没有在前端使用任何序列化程序。我可以做? 是的,我期待 jsonapi 数据。

【问题讨论】:

  • 你的参数是什么样的?
  • 这是我的参数:{"controller"=>"candidates", "action"=>"create"}
  • 你的参数中有模型数据吗?
  • 您的 JS 代码未将参数(姓名、电子邮件等)发送到 rails 应用程序。此外,您不必传递 id,因为它是由 rails 自动创建的。
  • 一个普通的 Ruby on Rails 表单将资源参数嵌套在资源命名空间内。这意味着params.permit(:name, :email) 应该是params.require(:candidate).permit(:name, :email)。从服务器日志中发布传入的参数可能会有所帮助。

标签: ruby-on-rails ember.js ember-data jsonapi-rails


【解决方案1】:

您必须在您的 ember 应用中定义一个模型: https://guides.emberjs.com/release/models/#toc_models

另外,如果你使用的是jsonapi规范,你应该设置related adapter

// app/adapters/application.js
import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({});

and serializer

// app/serializers/application.js
import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({});

【讨论】:

  • 谢谢!它现在可以工作了,我忘记添加序列化程序了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2018-01-15
  • 2021-01-14
相关资源
最近更新 更多