ICD*_*vin 6 ruby forms json ruby-on-rails
有点像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)
Run Code Online (Sandbox Code Playgroud)
当然,这种关系存在于我的Post模型中
has_many :images, :dependent => :destroy
accepts_nested_attributes_for :images
Run Code Online (Sandbox Code Playgroud)
和我的图像模型
belongs_to :post
Run Code Online (Sandbox Code Playgroud)
我丢失的地方是如何处理Post控制器的创建方法中的序列化图像数据?简单地解析JSON并保存它不会在保存时创建带有数据的Image模型(并且感觉不对):
params[:post][:images] = JSON.parse(params[:post][:images])
Run Code Online (Sandbox Code Playgroud)
所有这些基本上都达到了以下参数:
{"post": {"title": "", "content": "", ..., "images": [{ "public_id": "", "bytes": 12345, "format": "jpg"}, { ..another image ... }]}}
Run Code Online (Sandbox Code Playgroud)
整个过程看起来有点令人费解 - 我现在该怎么做,是否有更好的方法来做我想做的事情?(这也是嵌套属性所需的强参数......?)
编辑:
此时我收到了这个错误:
Image(#91891690) expected, got ActionController::Parameters(#83350730)
Run Code Online (Sandbox Code Playgroud)
来自这条线......
@post = current_user.reviews.new(post_params)
Run Code Online (Sandbox Code Playgroud)
似乎它不是从嵌套属性创建图像,但它是预期的.(同样的事情发生在:自动保存是否存在).
小智 6
刚刚遇到ActionController :: Parameters错误的问题.您需要确保在posts_controller中允许所有必要的参数,如下所示:
def post_params
params.fetch(:post).permit(:title, :content,
images_attributes: [:id, :public_id, :bytes, :format])
end
Run Code Online (Sandbox Code Playgroud)
确保您允许image.id属性非常重要.