Creating an object and uploading a file in a single form


I got a single form to create an object that can have file attached
(I’m using attachment_fu). The problem is with create/update actions.
Here’s how stripped create action looks like:

def create
@news =[:news])
@news.asset =[:asset]) if !params[:asset].blank?
&& !params[:asset][:uploaded_data].blank?

respond_to do |format|
    format.html { redircet_to news_path }
    format.html { render :action => "new" }


In the form I check if @news.asset is not nil and then display a link
to the asset (image).
There are 2 problems:

  • if the validation of news object fails, the asset is not saved, but
    @news.asset is not nil anymore, so I got link displayed to non-
    existing image
  • if the validation of news object fails, the file upload fields are
    empty. If validation fails once again, the params[:asset] hash is
    empty - this forces user to select a file to upload every time
    validation fails

How to solve it? Should I save the asset even if validation of news
object fails? If yes, how to automatically remove files that are not
related to any news object (i.e. the image is saved, validation of
news object fails and user simply closes the page without creating
news object).

Thanks in advance for any tips