Да, определенно не проблема с ID передаваемого вложенного объекта. В ошибке, которую я вставил в оригинал, он знает, что ID вложенного объекта (User) равен 7, а внешний объект (Blogger) еще не имеет идентификатора (потому что он новый). Похоже, в этой ситуации это просто пугает.
ьзование Rails 2.3.8
Цель состоит в том, чтобыСоздайте Blogger одновременнообновление модель вложенного пользователя (если информация изменилась и т. д.), ИЛИ создать нового пользователя, если его еще не существует.
Модель:
class Blogger < ActiveRecord::Base
belongs_to :user
accepts_nested_attributes_for :user
end
Контроллер Blogger:
def new
@blogger = Blogger.new
if user = self.get_user_from_session
@blogger.user = user
else
@blogger.build_user
end
# get_user_from_session returns existing user
# saved in session (if there is one)
end
def create
@blogger = Blogger.new(params[:blogger])
# ...
end
Форма:
<% form_for(@blogger) do |blogger_form| %>
<% blogger_form.fields_for :user do |user_form| %>
<%= user_form.label :first_name %>
<%= user_form.text_field :first_name %>
# ... other fields for user
<% end %>
# ... other fields for blogger
<% end %>
Хорошо работает, когда ясоздание новый пользователь через вложенную модель, но терпит неудачу, если вложенный пользователь уже существует и имеет идентификатор (в этом случае я бы хотел, чтобы он просто обновил этого пользователя).
Ошибка:
Couldn't find User with ID=7 for Blogger with ID=
Этот SO вопрос касается аналогичной проблемы, и только ответ предполагает, что Rails просто не будет работать таким образом. В ответе предлагается просто передать идентификатор существующего элемента, а не показывать форму для него, что прекрасно работает, за исключением того, что я хотел бы разрешить редактирование атрибутов пользователя, если они есть.
Глубоко вложенные формы Rails, использующие принадлежащие_, не работают?
Предложения? Это не похоже на необычную ситуацию, и кажется, что должно быть решение.