This tip has probably been suggested elsewhere but I'm not sure. It concerns the C and U of the CRUD. The default generated scaffold gives 4 methods and 3 views for updates and creates. You have the combination of (new and create) + (edit and update) methods in the controller. Then in the view you've got new.rhtml, edit.rhtml and _form.rhtml which is appended to new or edit according to which method you call. Not so DRY really. 'Rails Recepies' book gives a nice way to combine those in one method but at least when ajax is used I found some glitches. My idea is to give one method for create and another for update this way :
#controller def create @model = Model.new if params[:model] @model.attributes = params[:model] render :update=>... or whatever and return if @model.save ... end render :partial=>'form' # if no update.rjs or update.rhtml end
def update @model = Model.find param[:id] idem end
#view _form.rhtml <%form_for :model, @model, :url=>{:action=>controller.action_name}%> etc <%end%>
#view create.rjs optional #view create.rhml optional
The main idea is no matter what combination you use for rendering the result (helpers, rjs, rhtml) you got rid of all the new and edit methods and views. You just stay with plain create and update stuff which makes it much less confusing thanks to the ":action=>controller.action_name" trick in the _form.rhtml view. Hope it's usefull
Charly