Использование 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 %>
Хорошо работает, когда я создаю нового пользователя через вложенную модель, но терпит неудачу, если вложенный пользователь уже существует и имеет и ID (в этом случае мне бы хотелось, чтобы он просто обновлял эту пользователь).
Ошибка:
Couldn't find User with ID=7 for Blogger with ID=
Этот вопрос SO относится к аналогичной проблеме, и только ответ предполагает, что Rails просто не будет работать таким образом. Ответ предполагает просто передать идентификатор существующего элемента, а не показывать его форму, что прекрасно работает, за исключением того, что я хочу разрешить изменения атрибутов User, если они есть.
Глубоко вложенные формы Rails с использованием функции принадлежать неработающим?
Предложения? Это не кажется особенно необычной ситуацией, и, похоже, должно быть решение.