You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails API创建新条目时所有字段值为nil的问题排查

问题分析

从Rails服务器日志可以明确看到核心问题:

Parameters: {"{\r\n    \"username\": \"John\",\r\n
\"title\": \"DC\",\r\n    \"desc\": \"not bad\",\r\n
\"rating\": \"4\",\r\n    \"lat\": \"37.689\",\r\n
\"long\": \"41.987\"\r\n}"=>nil}

Rails没有正确解析你的JSON请求体,而是把整个JSON字符串当作了一个参数键,对应的值为nil,这就导致params[:username]、params[:title]等所有字段都取不到值,最终存入数据库的都是nil。

解决方案

1. 修正Postman的请求配置

  • 设置请求头:在Postman的Headers标签中添加Content-Type: application/json,这是让Rails识别并自动解析JSON请求体的关键。
  • 确认请求体格式:在Postman的Body标签中选择raw格式,然后在下拉菜单中选择JSON,再粘贴你的JSON内容,确保没有多余的换行或格式错误。

2. 恢复控制器的安全参数写法

你的控制器中已经定义了pin_params方法,这是Rails推荐的强参数写法,应该恢复使用它,而不是直接从params中取值:

def create
  pin = Pin.create!(pin_params)
  render json: pin, status: :created
end

private

def pin_params
  params.permit(:username, :title, :desc, :rating, :lat, :long)
end

3. 可选:关闭CSRF验证(仅开发环境)

日志中出现Can't verify CSRF token authenticity.,虽然这不是本次字段为nil的原因,但如果是开发环境测试API,可以在控制器中临时关闭CSRF验证:

class PinsController < ApplicationController
  skip_before_action :verify_authenticity_token, only: [:create]

  # ... 其他方法
end

内容的提问来源于stack exchange,提问作者Connor Cyphers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:55:37