Скрепка сохраняется в консоли, а не в представлениях, без ошибок - PullRequest
0 голосов
/ 09 марта 2011

У меня есть следующая модель:

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 не является причиной, у меня есть другие практически идентичные формы на других моделях с прикрепленными скрепками, которые все отлично работают.

Что мне здесь не хватает ???

1 Ответ

3 голосов
/ 09 марта 2011

Вам необходимо установить для атрибута multipart значение true

simple_form_for [@collection, @folder], :html => { :class => 'full', :multipart => true } do |f|

UPDATE

Вам не нужно устанавливать для атрибута multipart значение true, если вы используете Rails 3.1, поскольку он обрабатывается автоматически.

...