对 Rails 来说有点新意。
其中一个模型依赖于 has_many/belongs_to 关联中的另一个。
基本上,在我的应用程序上创建“帖子”时,用户还可以附加“图像”。理想情况下,这是两个独立的模型。当用户选择一张照片时,一些 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 并保存它并不会在保存时使用数据创建 Image 模型(并且感觉不对):
params[:post][:images] = JSON.parse(params[:post][:images])
所有这些本质上都达到了类似以下参数的结果:
{"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 都会发生同样的事情)。