我正在使用"默认"从脚手架创建方法:
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正确,为什么没有正确解析我的json主体呢?有什么想法吗?
这是使用rails' 4.2.4'。
答案 0 :(得分:0)
您需要配置params_warrper.rb:
控制器顶部的放置:
wrap_parameters format: [:json]
然后它应该自动将其解析为JSON。