代码之家  ›  专栏  ›  技术社区  ›  t56k

Rails的VUE:如何通过强参数创建一个嵌套对象?

  •  1
  • t56k  · 技术社区  · 6 年前

    给定一个rails后端和一个vue前端,我怎样才能发布到嵌套的 ImageAttachment 班级?一 Photo 可以有一个 图像附件 。我有这些强大的参数设置,感觉好像问题在那里,但我找不到任何东西。

    def photo_params
      params.require(:photo).permit(
        image_attachment: %i[data crop_x crop_y crop_width crop_height revert]
      )
    end
    

    这是附加子项的vue函数( 图像附件 )给家长的信息 照片 .

    uploading: function (file, xhr, formData) {
      formData.append('photo[image_attachment][data]', file)
    }
    

    但它的现状却造成了这个错误:

    ActudieCordRo::Apple Type EngMatRe: Ipple Type Engices附件(70277552586900)预期,获得{“data”=& gt;@原语文件名=“305949591309098900197760607359109442656o0.O.jpg”,@ CaltTyType=“MIG/JPEG”,@ Healths=“内容处置:表单数据;Name=”Popy[IMAGEIORITION] [DATAB] ];文件名= \“30594959116030309819.7860735910939 4262656O.JPG\\ \r\nClultType:图像/JPEG\r\n”& Gt;},这是ActudiePuxPoT的实例::HASHOVENIN差异访问(α70277506611620):

    2 回复  |  直到 6 年前
        1
  •  0
  •   sonic    6 年前

    我有 AssociationTypeMismatch . 我在用 accept_nested_attributes in model . 在你的例子中 image_attachment 可能代表联想,这就是错误的原因。 我会用 attr_accessor : imgattachment 在控制器里像这样

    photo = Photo.new
    img_attachment = ImageAttachment.new
    img_attachment.data = params[:imgattachment][:data]
    photo.image_attachment << img_attachment
    

    我的主题: ActiveRecord::AssociationTypeMismatch when trying to register user using devise

    似乎有问题 accept_nested_attributes

        2
  •  0
  •   t56k    6 年前

    所以解决这个问题的方法是 杠杆作用 这个 _attributes . JS:

    uploading: function (file, xhr, formData) {
      formData.append('photo[image_attachment_attributes][data]', file)
    }
    

    模型:

    accepts_nested_attributes_for :image_attachment, allow_destroy: true
    

    控制器:

    def create
      if @photo.update_attributes!(photo_params)
        response = @photo.reload && @photo.exists? ? @photo.for_vue : nil
        render json: { photo: response }, status: 200
      else
        render json: { error: @photo.errors }, status: 400
      end
    end
    
    private
    
    def photo_params
      params.require(:photo).permit(
        image_attachment_attributes:
          %i[data crop_x crop_y crop_width crop_height revert]
      )
    end