无法将我的强参数正确嵌套在Ruby on Rails中

问题描述 投票:0回答:1

我正在尝试在我的控制器中为根对象(项目)添加对象数组(在这种情况下为任务)作为返回类型。一个项目有很多任务,我想一次全部保存,但是我不断收到以下错误,表明返回类型不正确。

ActiveRecord::AssociationTypeMismatch (Task(#47457277775360) expected, got {"name"=>"Some task", "start"=>"2019-12-05T03:38:48.555Z", "end"=>"2019-12-14T03:38:48.555Z"} which is an instance of ActiveSupport::HashWithIndifferentAccess(#47457266882220))

我列入白名单的参数是这样的

# whitelist params
params.permit(:name, :description, tasks: [:name, :start, :end])

以上示例返回的数据:

{"name"=>"asdf", "description"=>"zxvccxvzzxcvxcvcxvzxcvz", "tasks"=>[{"start"=>"2019-12-05T03:38:48.555Z", "end"=>"2019-12-14T03:38:48.555Z", "name"=>"Some task"}]}

[[Edit]-这是我们正在使用的模型

# app/models/task.rb
class Task < ApplicationRecord
  # model association
  belongs_to :project

  # validation
  validates_presence_of :name
end
# app/models/project.rb
class Project < ApplicationRecord
  # model association
  has_many :tasks, dependent: :destroy
  accepts_nested_attributes_for :tasks

  # validations
  validates_presence_of :name
end
arrays ruby-on-rails json ruby-on-rails-5
1个回答
0
投票

根据rails文档Nested attributes allow you to save attributes on associated records through the parent。因此,在强大的参数中,您需要传递这样的属性。

params.permit(:name, :description, task_attributes: [:name, :start, :end])

我建议您将所有参数绑定在这样的一个属性下

params.require(:project).permit(:name, :description, task_attributes: [:name, :start, :end])
© www.soinside.com 2019 - 2024. All rights reserved.