Использовать вложенную модель rails для * создания * внешнего объекта и одновременного * редактирования * существующего вложенного объекта?

Использование 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 %>

Работает нормально, когда я создаю a нового пользователя через вложенную модель, но не работает, если вложенный пользователь уже существует и имеет идентификатор (в этом случае я бы хотел просто обновить этого пользователя).

Ошибка:

Couldn't find User with ID=7 for Blogger with ID=

Этот вопрос SO касается аналогичного проблема, и единственный ответ предполагает, что Rails просто не будет работать таким образом. Ответ предлагает просто передать идентификатор существующего элемента, а не показывать для него форму - что отлично работает, за исключением того, что я хотел бы разрешить редактирование атрибутов User, если они есть.

Глубоко вложенные формы Rails с использованием own_to не работает?

Предложения? Это не кажется особенно необычной ситуацией, и, похоже, должно быть решение.

20
задан Community 23 May 2017 в 10:29
поделиться