On Monday 30 January 2012 12:21 PM, Bo Zhao wrote:
I have a scenario that my user need to upload a image first and then
assign to another model, so I used a generic model, to upload the file
first. But I always get a exception of
ActiveRecord::UnknownAttributeError (unknown attribute: utf8). because
rails automatically adds a utf-8 field for the form submit.

model:
<code>
class AttachedImage<  ActiveRecord::Base
   belongs_to :attachable, :polymorphic =>  true

   has_attached_file :image
end
</code>

migration:
<code>
class CreateAttachedImages<  ActiveRecord::Migration
   def change
     create_table :attached_images do |t|

       t.string      :image_file_name
       t.string      :image_content_type
       t.integer     :image_file_size
       t.datetime    :image_updated_at
       t.references  :attachable,  :polymorphic =>  true

       t.timestamps
     end
   end
end
</code>

And the controller:
<code>
class AttachedImagesController<  ApplicationController
   def create

     @attched_image = AttachedImage.new(params)

     respond_to do |format|
       if @attched_image.save
         format.js
       else
         format.js
       end
     end
   end
end
</code>

the view part:
<code>
<div id="upload-image-dialog">
     <%= form_tag(@attached_image, :method =>  "POST", :remote =>  true,
:html =>  { :multipart =>  true }) do %>
       <%= file_field_tag :image %>
       <%= submit_tag("submit") %>
     <% end %>
     <h1 style="display:none">Successfully Uploaded.</h1>
</div>
</code>

it's quite straight forward, but every time I submit this form, I will
get an exception of the utf8 field added automatically by rails.

ActiveRecord::UnknownAttributeError (unknown attribute: utf8):
   app/controllers/attached_images_controller.rb:5:in `new'
   app/controllers/attached_images_controller.rb:5:in `create'

I could not understand that, this shall not be a problem right? We are
writing @model = Model.new(params) everyday, hope someone could help me
out and explain what's going on under the hood, thanks!

change in the controller

@attched_image = AttachedImage.new(params)

to

@attched_image = AttachedImage.new(params[:attached_image])


if above not working because of form_tag usage

then you have to use custom new like

@attched_image = AttachedImage.new(:image=>params[:image])

this should work.







--
You received this message because you are subscribed to the Google Groups "Ruby on 
Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to