【发布时间】:2015-10-14 18:51:48
【问题描述】:
我正在使用脚手架中的“默认”创建方法:
def create
@user = User.new(firstname: params[:firstname], surname: params[:surname])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
(我知道我在那里没有使用强参数,但无论如何:))。
当我使用非常特定的 REST 客户端发送 POST 请求时,params 哈希不包含参数。当我查看 request.body 时,它包含 JSON 格式的参数。另外,content_type 是 "application/json
要解决这个问题,我必须有
before_filter :fix_json_params
[...]
def fix_json_params
if request.content_type == "application/json"
@reparsed_params = JSON.parse(request.body.string).with_indifferent_access
end
end
private
def params
@reparsed_params || super
end
但是,我不明白为什么?如果 content_type 正确,为什么 rails 不能正确解析我的 json 正文?有什么想法吗?
这是使用 rails '4.2.4'。
【问题讨论】:
标签: ruby-on-rails ruby json params