Rails - 创建具有嵌套属性的记录

Posted

技术标签:

【中文标题】Rails - 创建具有嵌套属性的记录【英文标题】:Rails - create a record with nested attribute 【发布时间】:2022-01-21 01:51:17 【问题描述】:

我收到格式如下的请求:


  recipe_translations: [
      "lang": "en",
      "name": "wow",
      "value": "test"
    ]

Recipe:

class Recipe < ApplicationRecord
  has_many :recipe_translations, dependent: :destroy
  accepts_nested_attributes_for :recipe_translations
end

控制器:

class RecipesController < ApplicationController
  def create
    recipe = Recipe.new(recipe_params)
  end

  def recipe_params
    # whitelist params
    params.permit(recipe_translations: %i[lang name value])
  end

end

显然,有些地方很不对劲,但不确定是什么。我得到的错误是:

#<ActiveRecord::AssociationTypeMismatch: RecipeTranslation(#69020) expected, got \"lang\"=>\"en\", \"name\"=>\"wow\", \"value\"=>\"test\" which is an instance of ActiveSupport::HashWithIndifferentAccess(#52480)>

【问题讨论】:

【参考方案1】:

接收到的参数应该是不同的格式,才能让 Rails 使用它。您可能希望根据 Rails 视图标准调整视图并使用它,而不是发布自定义的 (?) JSON 对象。

【讨论】:

以上是关于Rails - 创建具有嵌套属性的记录的主要内容,如果未能解决你的问题,请参考以下文章

Rails form_for 具有相同属性的嵌套和关联资源已填充文本

- 更新 - Rails API 应用程序使用来自控制器的 POST 请求一次创建不同模型的多个嵌套记录

复杂Rails Active Record查询选择具有真实结果的记录,以便当天最新更新其他创建的记录

Rails:查找嵌套关联为空的记录

无法让 Rails 3 Active Scaffold 嵌套表单/记录正常工作

Spring Boot如何通过嵌套属性查找记录[重复]