Да, определенно не проблема с 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, использующие принадлежащие_, не работают?

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

Ответы на вопрос(1)

Ваш ответ на вопрос