Ruby on rails 在Rails 4中保存嵌套模型

Ruby on rails 在Rails 4中保存嵌套模型,ruby-on-rails,ruby,json,forms,Ruby On Rails,Ruby,Json,Forms,对Rails来说有点新鲜,在一点地方 其中一个模型依赖于另一个模型,在一个具有多个/属于多个关联的模型中 基本上,在我的应用程序上创建“帖子”时,用户还可以附加“图片”。理想情况下,这是两个独立的模型。当用户选择照片时,一些JavaScript会将其上传到Cloudinary,返回的数据(ID、宽度、高度等)会被JSON字符串化并设置在隐藏字段中 # The HTML = f.hidden_field :images, :multiple => true, :class => "im

对Rails来说有点新鲜,在一点地方

其中一个模型依赖于另一个模型,在一个具有多个/属于多个关联的模型中

基本上,在我的应用程序上创建“帖子”时,用户还可以附加“图片”。理想情况下,这是两个独立的模型。当用户选择照片时,一些JavaScript会将其上传到Cloudinary,返回的数据(ID、宽度、高度等)会被JSON字符串化并设置在隐藏字段中

# The HTML
= f.hidden_field :images, :multiple => true, :class => "image-data"

# Set our image data on the hidden field to be parsed by the server
$(".image-data").val JSON.stringify(images)
当然,这种关系存在于我的Post模型中

has_many :images, :dependent => :destroy
accepts_nested_attributes_for :images
还有我的形象模型

belongs_to :post
我迷路的地方是如何处理Post控制器的create方法上的序列化图像数据?简单地解析JSON并保存它不会在保存时创建包含数据的图像模型(而且感觉不正确):

所有这些基本上都会导致以下参数:

{"post": {"title": "", "content": "", ..., "images": [{ "public_id": "", "bytes": 12345, "format": "jpg"}, { ..another image ... }]}}
整个过程似乎有点复杂--我现在要做什么?有没有更好的方法来完成我一开始想做的事情?(像这样的嵌套属性也需要强参数…?)

编辑:

在这一点上,我得到了这个错误:

Image(#91891690) expected, got ActionController::Parameters(#83350730)
来自这一行

@post = current_user.reviews.new(post_params)
看起来它不是从嵌套属性创建图像,但它应该是。
(当:autosave存在或不存在时也会发生同样的情况)。

接受
的_嵌套的_属性_应该为您解决这个问题。因此,执行
Post.create(params[:Post])
也应该考虑嵌套的图像属性。可能出现的问题是,您没有在has\u many关系上指定一个
autosave
。因此,您可能想看看这是否会有所不同:

has_many :images, :dependent => :destroy, :autosave => true

当您保存帖子时,也应该保存图像。

刚刚出现ActionController::Parameters错误的问题。您需要确保在控制器中允许所有必要的参数,如下所示:

def post_params
  params.fetch(:post).permit(:title, :content,
                             images_attributes: [:id, :public_id, :bytes, :format])
end

确保允许image.id属性是很重要的。

您必须像这样构建参数:

params[:post][:images_attributes] = { ... }

您需要在
图像的关键字名称上添加
*\u属性

,谢谢您的回复。我确实试过了,虽然这似乎没有什么不同,虽然我确实得到了一个有趣的答案,我在上面编辑过(
Image预期,但为了简洁起见,得到了参数)。我有完全相同的问题EMB可以提供帮助
params[:post][:images_attributes] = { ... }