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查询选择具有真实结果的记录,以便当天最新更新其他创建的记录