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