Also die einfachste Lösung, auf die ich dann selber gekommen bin, ist ein before_validation:

class Container < ActiveRecord::Base
  acts_as_tree :order=>:position

  validates_presence_of :name
  validates_presence_of :myValue

  before_validation do |record|
record.myValue = "Child of #{record.parent.name}" unless record.parent == nil
  end
end

was myValuet immer dann überschreibt, wenn ein parent vorhanden ist: Das hat dazu den Vorteil, dass es die normale Validierung nicht aushebelt - wenn also irgendwer versucht, einen Container ohne parent *und* ohne myValue anzulegen, wird das nach wie vor richtig validiert und abgelehnt.

Grüße
stefan



Am 26.07.2007 um 16:48 schrieb Stefan Frank:

Hi,

ich habe einen active_record, der mit einem acts_as_tree ausgezeichnet ist: Ich möchte jetzt beim parent.children.create default-werte für das neue child setzen, aber irgendwie weiß ich gar nicht recht, wie ich das formulieren soll - kann ich einfach das children.create überschreiben, etwa so:

class Container < ActiveRecord::Base
  acts_as_tree :order=>:position


  def children.create (attributes ={})
    super ( attributes.merge ({:myValue =>"Child of #{self.name}"} )
  end
end

Die Syntax ist sicher etwas konfus(gibt ein method_missing): Ich will eigentlich nur beim create einige von der parent-klasse abgeleitete Attribute mit in das Child mischen - kann mir da jemand weiterhelfen?!

Viele Grüße
Stefan_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Antwort per Email an