Mam następujący obiekt formularza do zarządzania skomplikowanym formularzem zagnieżdżonym.Jak powinienem obsługiwać akcję edycji i aktualizacji, gdy używam obiektu formularza?
Forma
= simple_form_for(@profile_form, :url => profiles_path) do |f|
...
Trasy
resources :profiles
sterownika
class ProfilesController < ApplicationController
def new
@profile_form = ProfileForm.new
end
def edit
@profile_form = ProfileForm.new(params[:id])
end
def create
@profile_form = ProfileForm.new
if @profile_form.submit(params[:profile_form])
redirect_to @profile_form.profile, notice: 'Profile was successfully created.'
else
render action: "new"
end
end
def update
@profile_form = ProfileForm.new(params[:id])
if @profile_form.submit(params[:profile_form])
redirect_to @profile_form.profile, notice: 'Profile was successfully updated.'
else
render action: "edit"
end
end
end
Forma obiektu
class ProfileForm
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(profile_id = nil)
if profile_id
@profile = Profile.find(profile_id)
@person = profile.person
end
end
...
def submit(params)
profile.attributes = params.slice(:available_at)
person.attributes = params.slice(:first_name, :last_name)
if valid?
profile.save!
person.save!
true
else
false
end
end
def self.model_name
ActiveModel::Name.new(self, nil, "Profile")
end
def persisted?
false
end
end
Ale teraz, kiedy jestem edycji obiektu za pomocą tego formularza create
działań jest tzw. Jak powinienem zmienić ten formularz? Kod poniżej na update
tworzy kolejny obiekt profilu.
Ok, teraz rozumiem, dzięki. Ale jak zmienić adres URL formularza: '' = simple_form_for (@profile_form,: url => profiles_path) do | f | '' I pojawia się błąd: '' niezdefiniowana zmienna lokalna lub metoda 'id 'dla # '' –
tomekfranek
A co, jeśli @person jest zerowe? – tomekfranek
Po dodaniu metody '' to_param'' nadal mam ten sam błąd. Wygląda na to, że problem dotyczy adresu URL. – tomekfranek