У меня есть следующая модель:
class Folder < ActiveRecord::Base
# RELATIONSHIPS
belongs_to :collection
belongs_to :parent, :class_name => 'Folder'
has_many :subfolders, :class_name => 'Folder', :foreign_key => :parent_id
has_many :photos
has_attached_file :image,
:styles => { :sixth => "145x109#", :eighth => "106x80#", :tenth => "87x65#" },
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => "collections/:id/:style.:extension",
:default_url => '/images/no_folder_image_:style.png'
...
end
Когда я делаю это в консоли ...
f = Folder.first
f.image = "foo.jpg"
f.save!
... тогда изображение сохраняется и отлично работает.
Однако, когда я пытаюсь создать или обновить изображение с помощью форм, я не получаю ошибок, но это не работает.
Вот пример журнала:
Started POST "/collections/community-collection/folders/11" for 127.0.0.1 at 2011-03-09 10:31:05 -0600
Processing by Collections::FoldersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"RpY1Ov1oMsA7JhvpNZpvuoJfNaRV8BAjiCbHYkUQSus=", "folder"=>{"name"=>"Test With Image", "parent_id"=>"1", "image"=>"Snowy Chicago.jpg", "description"=>""}, "commit"=>"Update Folder", "collection_id"=>"community-collection", "id"=>"11"}
User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
SQL (0.2ms) SELECT sluggable_id FROM slugs WHERE ((slugs.sluggable_type = 'Collection' AND slugs.name = 'community-collection' AND slugs.sequence = 1))
Collection Load (0.1ms) SELECT "collections".* FROM "collections" WHERE "collections"."id" = 1 LIMIT 1
Role Load (0.2ms) SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'admin' AND ("roles_users".user_id = 2 ) LIMIT 1
Role Load (0.3ms) SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'curator' AND ("roles_users".user_id = 2 ) LIMIT 1
Role Load (0.3ms) SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles".id = "roles_users".role_id WHERE "roles"."name" = 'member' AND ("roles_users".user_id = 2 ) LIMIT 1
User Load (0.9ms) SELECT "users".*, "users"."id" FROM "users" INNER JOIN "assignments" ON "users".id = "assignments".user_id WHERE "users"."id" = 2 AND (("assignments".collection_id = 1)) LIMIT 1
Folder Load (0.6ms) SELECT "folders".* FROM "folders" WHERE "folders"."id" = 11 AND ("folders".collection_id = 1) ORDER BY "folders"."display_order" ASC LIMIT 1
CACHE (0.0ms) SELECT "collections".* FROM "collections" WHERE "collections"."id" = 1 LIMIT 1
[paperclip] Saving attachments.
Slug Load (0.3ms) SELECT "slugs".* FROM "slugs" WHERE ("slugs".sluggable_id = 1 AND "slugs".sluggable_type = 'Collection') ORDER BY id DESC LIMIT 1
Redirected to http://localhost:3000/collections/community-collection/folders
Completed 302 Found in 375ms
Обратите внимание, что написано [paperclip] Saving attachments.
Вот действия контроллера:
# this before_filter loads the collection folders belong to:
def load_collection
@collection = Collection.find(params[:collection_id])
end
def create
if @collection.folders.create(params[:folder])
redirect_to collection_folders_path(@collection)
else
render 'new'
end
end
def update
@folder = @collection.folders.find(params[:id])
if @folder.update_attributes(params[:folder])
redirect_to collection_folders_path(@collection)
else
render 'edit'
end
end
Вот форма:
= simple_form_for [@collection, @folder], :html => { :class => 'full' } do |f|
= f.input :name
= f.association :parent
= f.input :image, :hint => 'Choose an image or icon to represent this folder.'
= f.input :description
= f.submit
Эта форма работает должным образом, все остальные атрибуты сохраняются, но по какой-то причине скрепка не работает. Из того, что стоит, я знаю, что simple_form не является причиной, у меня есть другие практически идентичные формы на других моделях с прикрепленными скрепками, которые все отлично работают.
Что мне здесь не хватает ???