accepts_nested_attributes_for
Вложенные атрибуты позволяют сохранять атрибуты в связанных записях через родительский элемент.
Таким образом, у вас может быть небольшая путаница относительно того, какой из них вы хотите использовать в качестве родительского. , Если вы сделаете учащегося родителем с вложенными атрибутами для университета, вы не будете ссылаться на университет, а просто создадите новую запись об университете или обновите существующую с помощью вложенных атрибутов, которые вы использовали в форме студента.
One-to-one
Consider a Member model that has one Avatar:
class Member < ActiveRecord::Base
has_one :avatar
accepts_nested_attributes_for :avatar
end
Enabling nested attributes on a one-to-one association allows you to create the member and avatar in one go:
params = { member: { name: 'Jack', avatar_attributes: { icon: 'smiling' } } }
member = Member.create(params[:member])
member.avatar.id # => 2
member.avatar.icon # => 'smiling'
Таким образом, вы будете обновлять / создавать новые университетские записи только для каждого студента, для которого вы использовали эти вложенные атрибуты.
Вот для одного ко многим:
One-to-many
Consider a member that has a number of posts:
class Member < ActiveRecord::Base
has_many :posts
accepts_nested_attributes_for :posts
end
You can now set or update attributes on the associated posts through an attribute hash for a member: include the key :posts_attributes with an array of hashes of post attributes as a value.
For each hash that does not have an id key a new record will be instantiated, unless the hash also contains a _destroy key that evaluates to true.
params = { member: {
name: 'joe', posts_attributes: [
{ title: 'Kari, the awesome Ruby documentation browser!' },
{ title: 'The egalitarian assumption of the modern citizen' },
{ title: '', _destroy: '1' } # this will be ignored
]
}}
member = Member.create(params[:member])
member.posts.length # => 2
member.posts.first.title # => 'Kari, the awesome Ruby documentation browser!'
member.posts.second.title # => 'The egalitarian assumption of the modern citizen'
Вы также можете увидеть это в примере один ко многим выше. Вы хотите изменить / создать запись об университете, когда вы публикуете запись об ученике?
Если вы просто ищете ссылку, вы, по сути, имеете ее в своем первом примере и можете просто немного изменить свои маршруты, чтобы студент ссылался на университет .
Затем, когда у вас есть вложенные маршруты, вы можете просто немного поработать с частичной формой. Вот парень, который делает именно это
Так что, может быть, если я далеко, опишите, почему, когда вы создаете / обновляете студента, вы хотите создать / обновить университет. Если это именно то, что вы хотите сделать.
Это поможет другим в вашем контексте немного больше и поможет другим понять ваше намерение с помощью вложенных атрибутов.
Добавьте, например, частичную форму и Объясните свою цель.
РЕДАКТИРОВАТЬ: Как пунт, вы можете, возможно, взглянуть на имеет и принадлежит ко многим ассоциациям. Этот учебник говорит о вложенных атрибутах с ассоциация многих ко многим. Но так как я не уверен, что именно вы после этого, может или не может помочь.
Похоже, другой пунт говорит, что вы, возможно, захотите изменить студенческий послужной список, когда вы обновите их. Таким образом, вы бы хотели, чтобы студент принадлежал к университету, а в университете было много студентов, но при этом у него было много университетских записей, и у студента было много / есть одна университетская запись и запись, принадлежащая обоим. aka: this
Тогда вы можете попросить студента принять вложенные атрибуты для университетской записи / с.