Use o modelo aninhado de trilhos para * criar * objeto externo e simultaneamente * editar * objeto aninhado existent
Usando o Rails 2.3.8
Goal é paracri um Blogger enquanto simultaneamente update o modelo de usuário aninhado (caso as informações tenham sido alteradas etc.) OU crie um novo usuário, se ainda não existi
Modelo
class Blogger < ActiveRecord::Base
belongs_to :user
accepts_nested_attributes_for :user
end
ontrolador @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
Formato
<% 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 %>
Funciona bem quando estou criando um novo usuário por meio do modelo aninhado, mas falhará se o usuário aninhado já existir e tiver um ID (nesse caso, eu gostaria que ele simplesmente atualizasse esse usuário
Erro
Couldn't find User with ID=7 for Blogger with ID=
Esta pergunta SO trata de um problema semelhante, e a única resposta sugere que o Rails simplesmente não funcionará dessa maneira. A resposta sugere simplesmente passar o ID do item existente em vez de mostrar o formulário para ele - o que funciona bem, exceto que eu gostaria de permitir edições nos atributos do Usuário, se houver algu
Formulários Rails profundamente aninhados usando o perten_to não estão funcionand
Suggestions? Isso não parece uma situação particularmente incomum e parece que deve haver uma solução.