Próbuję utworzyć zagnieżdżony formularz modelu dla powiązania has_one. (Używam Rails 4)Nie można zaktualizować mojego modelu zagnieżdżonego dla skojarzenia has_one
W moim użytkownika i adres Model Mam następujący:
class User < ActiveRecord::Base
has_one :address
accepts_nested_attributes_for :address
end
class Address < ActiveRecord::Base
belongs_to :user
end
mój kontroler użytkownika:
class UsersController < ApplicationController
.
.
.
def edit
@user = User.find(params[:id])
@user.build_address if @user.address.nil?
end
def update
@user = User.find(params[:id])
if @user.update(params.require(:user).permit(:user_name, address_attributes: [:street]))
flash[:success] = "Profile updated successfully"
sign_in @user
redirect_to @user
else
flash.now[:error] = "Cannot updating your profile"
render 'edit'
end
end
end
wreszcie moim zdaniem mam:
= form_for(@user) do |f|
= render 'shared/error_messages', object: f.object
%div
= f.label :user_name, "User name"
= f.text_field :user_name
= f.fields_for :address do |add|
= addd.label :street
= d.text_field :street
= f.submit "Update"
Kiedy próbuję wypełnić ulicę po raz pierwszy, działa, ale gdy próbuję wykonać aktualizację e pojawia się błąd: Failed to remove the existing associated address. The record failed to save after its foreign key was set to nil
Jakiś pomysł, gdzie jest błąd? thank's
woow to dziękuję ty, to jest to, co szukam: D, ale czy możesz wyjaśnić więcej, co było przyczyną mojego błędu tutaj? – medBo
czy możesz mi wyjaśnić, dlaczego powinienem dodać id do mojego address_attributes please – medBo
@medBo Nie wiem, dlaczego musisz uwzględnić the: id do zagnieżdżonych atrybutów, które musisz zaktualizować. Nie jest to szczególnie udokumentowane i miałem dokładnie ten sam problem kilka miesięcy temu, walcząc przez tydzień przed znalezieniem rozwiązania. może bardziej zaawansowany/ekspert programista Rails może pomóc. szczęśliwy, że był pomocny ;-) – d34n5