Ответ 1
Вложенные атрибуты работают нормально для ассоциации belongs_to, как и Rails 4. Возможно, она была изменена в более ранней версии Rails, но я тестировал ее в 4.0.4, и она определенно работает так, как ожидалось.
Я получаю всевозможные противоречивые сведения об этом основном вопросе, и ответ довольно важен для моих текущих проблем. Итак, очень просто, в Rails 3 разрешено или не разрешено использовать accepts_nested_attributes_for с отношением own_to?
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"
Вложенные атрибуты работают нормально для ассоциации belongs_to, как и Rails 4. Возможно, она была изменена в более ранней версии Rails, но я тестировал ее в 4.0.4, и она определенно работает так, как ожидалось.
Названия состояний epocwolf doc в первой строке "Вложенные атрибуты позволяют сохранять атрибуты связанных записей через родительский." (мой акцент).
Вам может быть интересен этот другой вопрос SO, который соответствует тем же строкам, что и этот. Он описывает два возможных решения: 1) перемещение accepts_nested_attributes на другую сторону отношения (в данном случае Organization) или 2) с использованием метода build
создайте Организацию в Пользователе перед тем, как передать форму.
Я также нашел суть, которая описывает потенциальное решение для использования accepts_nested_attributes с отношением own_to, если вы готовы иметь дело с небольшим дополнительный код. Это также использует метод build
.
Для ассоциации belongs_to
в Rails 3.2 вложенная модель нуждается в следующих двух шагах:
(1) Добавить новую attr_accessible
в вашу дочернюю модель (модель пользователя).
accepts_nested_attributes_for :organization
attr_accessible :organization_attributes
(2) Добавьте @user.build_organization
к вашему дочернему контроллеру (User controller), чтобы создать столбец 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