Forum: Rails Germany Validierung und Error-Messages bei n-Models in einem Form

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
S. K. (Guest)
on 2009-02-17 14:58
Hi,

vielleicht kann mir jemand weiterhelfen. Habe das Problem, dass ich eine
polymorphische Beziehung zwischen zwei Modellen angelegt habe und diese
in einem Formular bearbeitet werden:

Model Account (mit Account-Typ, in diesem Fall z.B. Employee)
Model Employee (besitzt 1 Account)

Das Problem: Ich finde keine sinnvolle Möglichkeit, dass die Fehler
durch Validierung beider Modelle bei "Neu Anlegen" und/oder "Updaten"
gleichzeitig angezeigt werden. Es ist so, dass z.B. zuerst Employee
vollständig validiert wird und erst im Anschluss der zugehörige Account
(dessen Fehler sind erst ersichtlich, wenn Employee korrekt ist).
Ein "validates_associated :account" in Employee funktioniert bei mir nur
für "create" ordnungsgemäß - leider erhalte ich dann aber zusätzlich
eine Fehlermeldung, die keine Relevanz für den Nutzer hat ("is
invalid").
Hoffe ich hab es halbwegs verständlich erklärt ;). Danke bereits für
eventuelle Hilfen!

Code-Beispiel aus employees_controller.rb

 def new
    @employee = Employee.new
    @account = Account.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @employee }
    end
  end



 def edit
    access_to_profile
    @employee = Employee.find(params[:id])
  end



  def create
    @employee = Employee.new(params[:employee])
    @account = @employee.build_account(params[:account])

    respond_to do |format|
      if (@employee.save)
        # funktioniert nur durch "validates_associated" so, dass
@account ebenfalls gespeichert wird
        flash[:notice] = I18n.t 'notice_employee_new'
        format.html { redirect_to(admin_employees_url) }
        format.xml  { render :xml => @employee, :status => :created,
:location => @employee }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @employee.errors, :status =>
:unprocessable_entity }
      end
    end
  end



def update
    access_to_profile
    @employee = Employee.find(params[:id])
    @account = Account.find(@employee.account)

    respond_to do |format|
      if (@employee.update_attributes(params[:employee]) &&
@account.update_attributes(params[:account]))
        flash[:notice] = I18n.t 'notice_employee_edit'
        format.html { redirect_to(admin_employees_url) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @employee.errors, :status =>
:unprocessable_entity }
      end
    end
  end
This topic is locked and can not be replied to.