Rails 4中Cocoon嵌套表单JSON字段的Strong Params配置问题
解决Rails 4中Cocoon嵌套表单JSON字段的强参数问题
我之前也踩过这个坑,Rails 4的强参数对JSON类型字段的处理确实不能像普通字符串字段那样直接写字段名,得特殊配置一下。下面给你两种针对性的解决方案:
1. 若miscellanous是任意键值对的JSON对象
如果允许用户自由输入任何JSON结构,你只需要在强参数里用miscellanous: {}来放行所有嵌套键值:
def project_params params.require(:project).permit( :name, :description, owners_attributes: [ :name, :email, :_destroy, miscellanous: {} # 允许JSON字段的任意结构 ] ) end
2. 若miscellanous有固定的键结构
比如你明确知道这个JSON里只会包含phone、address、age这类固定键,那就直接列出这些键即可:
def project_params params.require(:project).permit( :name, :description, owners_attributes: [ :name, :email, :_destroy, miscellanous: [:phone, :address, :age] # 指定允许的JSON内部键 ] ) end
额外提醒
- 表单提交要保证JSON格式合法:如果用文本框输入JSON字符串,要让用户输入标准JSON格式(比如
{"phone":"123456","address":"xxx"});如果用嵌套表单字段对应JSON里的每个键,Rails会自动把这些参数转换成哈希存入JSON字段。 - 注意字段拼写:你写的
miscellanous可能是拼写失误(正确应为miscellaneous),如果数据库字段名是后者,记得统一修改,避免参数不匹配。
内容的提问来源于stack exchange,提问作者jimcgh
相关产品推荐
相关产品推荐

