rails数组属性上的强参数错误

时间:2017-07-26 05:46:48

标签: ruby-on-rails ruby activerecord active-model-serializers

我尝试使用此请求正文将我的json发布到rails服务器

    {"post":{
    "user_id": 2,
    "title": "kehangatan di pagi hari",
    "category": "kehangatan di pagi hari",
    "imageposts": [{"imageurl":"DJAWHDAHWDKJHAW DHJAWDHAWDAWDAD"}],
    "description":"<p>memang sange</p>"
  } }

这是我的posts_params

  def post_params
    params.require(:post).permit(:title, :user_id, :description, :category, :imageposts => [:imageurl])
  end

不幸的是,当我发一个ajax帖子时,我的终端出现了错误

#<ActiveRecord::AssociationTypeMismatch: Imagepost(#42287660) expected, got ActiveSupport::HashWithIndifferentAccess(#30074960)>

我正在尝试这个我的imageposts强大的参数,但它也不起作用

imageposts: [:imageurl]

任何人都可以解决这个问题......

2 个答案:

答案 0 :(得分:1)

strong params很好。问题是imageposts是一个关联,但只是猜测,它被设置为属性post.update_attributes(post_params)

如果您希望像这样更新,可能的解决方案是使用accepts_nested_attributes_for

您的模型必须具有以下内容:

class Post
  belongs_to :user
  has_many :imageposts
  accepts_nested_attributes_for :imageposts
end

params的名称必须是imageposts_attributes,而不仅仅是imageposts

def post_params
  params.require(:post).permit(:title, :user_id, :description, :category, :imageposts_attributes => [:imageurl])
end

答案 1 :(得分:0)

您正在传递多张图片。因此,您可以将coocoon gemaccepts_nested_attributes_for

一起使用

了解更多信息https://github.com/nathanvda/cocoon