私はこの基本的な質問に関してあらゆる種類の相反する情報を得ており、その答えは私の現在の問題にとって非常に重要です。したがって、非常に簡単に、Rails 3では、belongs_to関係でaccepts_nested_attributes_forを使用することは許可されていますか?
class User < ActiveRecord::Base
belongs_to :organization
accepts_nested_attributes_for :organization
end
class Organization < ActiveRecord::Base
has_many :users
end
ビュー内:
= form_for @user do |f|
f.label :name, "Name"
f.input :name
= f.fields_for :organization do |o|
o.label :city, "City"
o.input :city
f.submit "Submit"
ネストされた属性は、Rails 4のように、belongs_toアソシエーションに対して正常に動作するようです。Railsの以前のバージョンで変更された可能性があります。
Doc epochwolfは、最初の行で「ネストされた属性を使用すると、関連するレコードに属性を保存できます親を介して」と述べています。 (私の強調)。
この他のSOこれと同じ行に沿った質問 に興味があるかもしれません。それは2つの可能な解決策を説明しています。1)accepts_nested_attributesを反対側に移動します関係(この場合は組織)、または2) build
メソッドを使用 フォームをレンダリングする前にユーザーに組織を構築します。
また、 belongs_to関係でaccepts_nested_attributesを使用するための潜在的な解決策 少し余分なコードを処理したい場合について説明するGistを見つけました。これもbuild
メソッドを使用します。
Rails 3.2)のbelongs_to
アソシエーションの場合、ネストされたモデルには次の2つの手順が必要です。
(1)新しいattr_accessible
を子モデル(ユーザーモデル)に追加します。
accepts_nested_attributes_for :organization
attr_accessible :organization_attributes
(2)organization
列を作成するために、@user.build_organization
を子コントローラー(ユーザーコントローラー)に追加します。
def new
@user = User.new
@user.build_organization
end
Ruby on Rails 5.2.1
class User < ActiveRecord::Base
belongs_to :organization
accepts_nested_attributes_for :organization
end
class Organization < ActiveRecord::Base
has_many :users
end
あなたのコントローラーにたどり着いた、「users_controller.rb」であると仮定します:
Class UsersController < ApplicationController
def new
@user = User.new
@user.build_organization
end
end
そして、ニックがやったようにビュー:
= form_for @user do |f|
f.label :name, "Name"
f.input :name
= f.fields_for :organization do |o|
o.label :city, "City"
o.input :city
f.submit "Submit"
最後に、@ user3551164がすでに解決していることがわかりますが、今(Ruby on Rails 5.2.1)attr_accessible :organization_attributes
は不要です)