Rails 5.2,带有快速jsonapi 1.5和Ember 3.4
我在Ember中创建了一个新的标记记录,如下所示:
let newTag = this.get('store').createRecord('tag', {
name: this.get('name')
});
newTag.save();
这将发送以下json(如Chrome的Network选项卡中所示的Request Payload):
{"data":{"attributes":{"name":"photos","created_at":null,"updated_at":null},"type":"tags"}}
但是Rails只得到(通过输出TagsController的create方法中的参数来验证):
{"controller"=>"tags", "action"=>"create"}
并抛出以下错误:
ActionController::ParameterMissing (param is missing or the value is empty: tag)
下面是我的控制器代码:
# app/controllers/tags_controller.rb
class TagsController < ApplicationController
def create
tag = Tag.create!(tag_params)
render json: {status: "success"}
end
private
def tag_params
puts params
params.require(:tag).permit(:name)
end
end
让ember和rails相互理解的诀窍是什么?既然ember在有效负载中发送“type”,我能否让Rails理解这是模型,从而满足我设置的“tag”出现在params中的要求?
2条答案
按热度按时间envsm3lx1#
在重新阅读了action controller概述之后,我了解到我必须在请求中包含
'Content-Type': 'application/json'
头。我必须处理的下一个问题是改变Rails控制器中强参数的使用:
希望这对其他人有帮助。
nzk0hqpo2#
在ember 3.26中,你可以这样做:
而不是