【问题标题】:Rails not updating record when passed an array of association ids传递关联ID数组时Rails不更新记录
【发布时间】:2021-07-11 18:39:04
【问题描述】:

如果您使用 tag_ids 之类的定义作为 id 数组传入参数,Rails 将处理向对象添加关联的 has_many 项,我说得对吗?

如果是这样,我会将以下内容发布到我的项目控制器:-

{
    "title": "Bottle",
    "tag_ids": [25, 26]
}

发生的事情是 tag_ids 被忽略了。我已经添加了 id 为 25 的标签,但没有包含 26。

我的控制器:-

# PATCH/PUT /api/items/1
  def update
    if @item.update(item_params)
      render json: @item, include: ['tags']
    else
       render json: @item.errors
    end
  end 

  def item_params
    params.require(:item).permit(:name, :tag_ids)
  end

项目has_and_belongs_to_many标签,它们有一个jobs_tags的连接表。该关联有效,因为我在上面的回复中返回了标签。但是,我似乎无法添加它们。知道我哪里可能出错了吗?

我是否需要在 Item 模型中显式添加 tag_ids 字段?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-5


    【解决方案1】:

    tag_ids 参数是一个数组。但是permit(:name, :tag_ids) 只允许一个tag_ids 属性。

    将权限更改为:

    定义项目参数 params.require(:item).permit(:name, tag_ids: []) 结束

    更多详情请见how to permit an array with strong parameters

    【讨论】:

    • 谢谢@spickermann - 但出于某种原因,这对我不起作用。当我发布 POST 时 - 我的日志显示 Parameters: {"title"=>"Bottle 2", "tag_ids"=>[24, 25], "id"=>"5", "item"=>{"title"=>"Bottle 2"}} - 如果这有帮助吗?标签没有显示在第二部分的原因是什么?
    • 我不再收到 Unpermitted parameter: :tag_ids,所以这是向前迈出的一步 - 但是,记录没有用 ID 更新。它仍然无视他们。
    • OK - 找到了解决方案。我需要在上面实现您的解决方案,并将 item 添加为我的 JSON 中的顶级对象。不知道为什么需要这样做,因为其他字段在没有我声明 item 的情况下可以正常更新,但是哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2023-03-19
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多