2017-03-05 6 views
0

したがって、私はかなり新しいRailsを使用しています。 Rails 5では、ネストされた属性を使用して親オブジェクトを使用して複数の子オブジェクトを作成します。

は私が Developerモデル、 Townshipモデルと Projectモデルを持っており、その内容は次のとおりです。 -

Developer.rb

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

    accepts_nested_attributes_for :township 
end 

Township.rb

Class Township < ApplicationRecord 
    belongs_to :developer 
    has_many :projects 

    accepts_nested_attributes_for :project 
end 

Project.rb

Class Project < ApplicationRecord 
    belongs_to :township 

end 

私は、次のようなプロジェクトを作成したい: -

project = Developer.create(
      { 
      name: 'Lodha', 
      township_attributes: [ 
      { 
      name: 'Palava', 
      project_attributes: [ 
       { 
       name: 'Central Park' 
       }, 
       { 
       name: 'Golden Tomorrow' 
       } 
      ]} 
      ]}) 

私はこれを実現することができる方法についての任意のアイデア?私はまた、DeveloperControllerで必要とされる強力なパラメータを理解する必要があります。

+0

はあなたの関連付けが正しく定義されていますか? – rogelio

+0

私が理解するところから、彼らはそうです。 –

+0

大丈夫ですが、関係は1) '開発者'は 'プロジェクト'と多対多である2) '開発者'は ''郷 '' hast-many 'プロジェクト' ' – rogelio

答えて

3

私はあなたが(プラスそれが読みにくくなります)1行でそれを作成するための方法を知っていませんが、以下のようなコードを使用して、レールでこれを行うことができます。

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 

保存開発者は正しく設定されていることを前提に、正しい外来キーで他のすべてのものを保存します。パラメータを正しくループしていることを確認するために、パラメータの形式に注意してください。

+0

ご指導ありがとうございます。はい、私はあなたのアプローチを非常によく理解しています。私はマッピングが非常にシンプルで一貫しているので、これを実現する方法がなければならないと考えています。モデルの継承に関して、Rails 5は 'ActiveRecord :: Base'を継承する' ApplicationRecord'という抽象クラスを自動的に生成し、ActiveRecordの機能をカスタマイズしたり拡張したりするためのパッチを適用しません。 –

+0

恐ろしい、訂正のおかげで、私はそれを知らなかった。 – theBrezilien

+0

確かに、いつも楽しいです。 –

関連する問題