Ruby on rails Rails 5通过使用嵌套属性使用父对象创建多个子对象

Ruby on rails Rails 5通过使用嵌套属性使用父对象创建多个子对象,ruby-on-rails,activerecord,orm,nested-attributes,Ruby On Rails,Activerecord,Orm,Nested Attributes,所以,我对Rails还相当陌生,而且由于我的模型的复杂性,我被卡住了 我有一个开发者模型、一个乡镇模型和一个项目模型,其内容如下:- Developer.rb Class Developer < ApplicationRecord has_many :townships, has_many :projects, through: :townships accepts_nested_attributes_for :township end Class Township &

所以,我对Rails还相当陌生,而且由于我的模型的复杂性,我被卡住了

我有一个
开发者
模型、一个
乡镇
模型和一个
项目
模型,其内容如下:-

Developer.rb

Class Developer < ApplicationRecord
  has_many :townships,
  has_many :projects, through: :townships

  accepts_nested_attributes_for :township
end  
Class Township < ApplicationRecord
  belongs_to :developer
  has_many :projects

  accepts_nested_attributes_for :project
end  
Class Project < ApplicationRecord
  belongs_to :township

end  
Project.rb

Class Developer < ApplicationRecord
  has_many :townships,
  has_many :projects, through: :townships

  accepts_nested_attributes_for :township
end  
Class Township < ApplicationRecord
  belongs_to :developer
  has_many :projects

  accepts_nested_attributes_for :project
end  
Class Project < ApplicationRecord
  belongs_to :township

end  

关于如何实现这一点,有什么想法吗?我还需要了解
DeveloperController

中所需的强参数白名单,我不知道如何在一行中创建它(而且可读性较差),但您可以使用与下面类似的代码使用rails来实现这一点:

def create
  developer = Developer.new(name: 'Loha')
  township = developer.townships.build({ name: 'Palava' })
    # for this part I don't know what your form looks like or what the 
    # params look like but the idea here is to loop through the project params like so
  params[:projects].each do |key, value|
    township.projects.build(name: value)
  end

  if developer.save
    redirect_to #or do something else
  end
end

保存开发人员将使用正确的外键保存所有其他内容,前提是设置正确。只需注意参数的格式,以确保正确循环。

我不知道如何在一行中创建它(另外,它的可读性较低),但您可以使用类似于以下代码的rails来实现这一点:

def create
  developer = Developer.new(name: 'Loha')
  township = developer.townships.build({ name: 'Palava' })
    # for this part I don't know what your form looks like or what the 
    # params look like but the idea here is to loop through the project params like so
  params[:projects].each do |key, value|
    township.projects.build(name: value)
  end

  if developer.save
    redirect_to #or do something else
  end
end

保存开发人员将使用正确的外键保存所有其他内容,前提是设置正确。只需注意参数的格式,以确保正确循环。

您的关联定义正确吗?据我所知,它们是。好的,但是关系是:1)
开发商
项目
是多对多的,或2)
开发商
有多个
乡镇
有多个
项目
开发商和乡镇有一对多,乡镇和项目有一对多的映射。因此,开发商和项目也应该在整个城镇进行一对多的测绘。“一对多”是一种关联吗?或者一个
在同一个模型中同时有一个
和多个
关联?您的关联定义正确吗?据我所知,它们是。好的,但是关系是:1)
开发商
项目
是多对多的,或2)
开发商
有多个
乡镇
有多个
项目
开发商和乡镇有一对多,乡镇和项目有一对多的映射。因此,开发商和项目也应该在整个城镇进行一对多的测绘。“一对多”是一种关联吗?或者一个
在同一型号中同时有一个
和多个
关联?感谢您的指导。是的,我非常理解你的方法。我仍然相信一定有一种方法可以一次性完成,因为映射非常简单且一致。关于模型继承,Rails 5现在自动生成一个名为
ApplicationRecord
的抽象类,该类继承了
ActiveRecord::Base
,因此不需要进行任何修补来定制或扩展ActiveRecord的功能。太棒了,感谢您的更正,我不知道。当然,这总是一件愉快的事。谢谢你的指导。是的,我非常理解你的方法。我仍然相信一定有一种方法可以一次性完成,因为映射非常简单且一致。关于模型继承,Rails 5现在自动生成一个名为
ApplicationRecord
的抽象类,该类继承了
ActiveRecord::Base
,因此不需要进行任何修补来定制或扩展ActiveRecord的功能。太棒了,感谢您的更正,我不知道。当然,这总是一件愉快的事。