hallo,

Am 26.04.2008 um 00:10 schrieb Thomas R. Koll:


Am 26.04.2008 um 00:07 schrieb Phillip Oertel:
achso!

rest-mäßig erstellst du ein neues objekt, also sollte es ein POST auf die collection des models werden. lass doch den request auf create gehen, und gib beim klicken dex (+) die id des zu kopierenden datensatzes mit (z.b. als "create_from_id"). in der create-methode wird dann unterschieden ob die create_from_id mitkommt, wenn ja wird der datensatz "geklont" und mit geändertem datum neu gespeichert, wenn nein wird ein normaler create. dagegen ist imho nichts einzuwenden.

Sorry, aber das ist einfach nur dreckiger Code und verwirrt auch schnell den nächsten Programmierer.

na, noch ganz schon aggressiv um die zeit ...
vorneweg: deine lösung ist ebensogut und wenn man rest mal ausser acht lässt wäre es wirklich klarer eine separate methode zu machen. dreckiger code ist aber was anderes.

eine zusätzliche Methode lässt sich viel schneller finden und schon allein vom Namen verstehen.

map.resources :mymodel, :collection => {:plus => :put} muss auch erstmal einer finden und verstehen ...

die vorteile meiner lösung sind, dass man nicht am routing schrauben muss und innerhalb der rest-konventionen bleibt. aber wie schon oben geschrieben, ich will nicht behaupten, dass das eine besonders schöne lösung ist. trotzdem kann man das ganze einigermaßen verständlich coden (nicht getestet) ...

def create
  new_record_attributes = if params[:create_from_id]
    attributes = MyModel.find(params[:create_from_id]).attributes
    attributes.starts_at = attributes.starts_at + 1.day
    attributes
  else
    params[:my_model]
  end
  MyModel.create!(new_record_attributes)
end


Man spart ja auch die lästigen Kommentare damit ;-)

??

viele grüße,
phillip_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Antwort per Email an