项目与任务是一对多关系,项目accepts_nested_attributes_for :tasks
.
在表单中,我的任务对象看起来像:
project[tasks][2][assigned_time]
project[tasks][2][due_time]
当表单提交时,我得到一个哈希值:
参数:{"use utf8"=>"✓"、"authenticity_token "=>"...=","项目"=>{"id"=>"1","任务"=>{"1"=>{"assigned_time"=>"9","due_time"=>"17点"},"2"=>{"assigned_time"=>"9","due_time"=>"17点"}}
然后我希望通过保存项目对象来保存它们:
project = Project.find(params[:id])
respond_to do |format|
if project.update_attributes(params[:tasks])
但是我得到:
警告:不能批量分配受保护的属性:id SQL (0.3ms)ROLLBACK在169ms内完成
ActiveRecord::AssociationTypeMismatch (Task(#2188181260) expected, got数组(# 2151973780)):
有什么办法解决这个问题吗?
在您的Projects
模型中,accepts_nested_attributes_for :tasks
。如果你有has_many :tasks
关联,这将定义@project.tasks_attributes=
;如果你有has_one :task
关联,这将定义@project.task_attributes=
。
在您的表单中,以下内容:
= form_for @project do |f|
= f.label :project_attribute
= f.text_field :project_attribute
= f.fields_for :tasks do |t|
= t.label :task_attribute
= t.text_field :task_attribute
在项目控制器中,输入以下内容:
def new
@project = Project.new
@project.tasks.build #=> if has_many
@project.build_task #=> if has_one
end
我想,你只是忘记在你的项目模型中添加task_attributes到attr_accessible列表:
attr_accessible :tasks_attributes, ...
还有,请注意,也许你生成了错误的表单,因为在我当前的应用程序中,嵌套属性的表单使用task_attributes方法,而不是任务(像你的哈希)