Невозможно сериализовать объект класса ActionDispatch :: Http :: UploadedFile в BSON - PullRequest
3 голосов
/ 10 августа 2011

Я слежу за GridFS с Mongoid и CarrierWave , чтобы реализовать простое полиморфное отношение has_many, и когда я пытаюсь создать нового пользователя с аватаром через назначение вложенных атрибутов, я получаю:

Cannot serialize an object of class ActionDispatch::Http::UploadedFile into BSON

Кто-нибудь еще сталкивался с этим?Я заметил, что несколько человек опубликовали ответы на статью «GridFS с Mongoid и CarrierWave», но я не смог найти никого с ответом.

# app/models/asset.rb
class Asset
    include Mongoid::Document
    include Mongoid::Timestamps

    mount_uploader :file, AssetUploader

    field :name, type: String

    referenced_in :attachable, polymorphic: true
end
# app/models/user.rb
class User
    include Mongoid::Document
    include Mongoid::Timestamps

    references_one :avatar, as: :attachable

    accepts_nested_attributes :avatar
end
# config/initializers/carrierwave.rb
CarrierWave.configure do |config|
    config.grid_fs_connection = Mongoid.database
    config.storage = :grid_fs
    config.grid_fs_access_url = "/images"
end
# app/uploaders/asset_uploader.rb
class AssetUploader < CarrierWave::Uploader::Base  
end
# app/views/users/new.html.haml
= semantic_form_for(@user, html: { multipart: true }) do |f|
    = f.inputs do
    = f.semantic_fields_for :avatar do |af|
        = af.input :file, as: :file
    = f.buttons do
        = f.commit_button "Upload"

1 Ответ

2 голосов
/ 02 октября 2011

Все дело в именовании полей.

У меня была та же проблема с mongo_mapper и полем, которое я переименовал в форме.

Поля формы должны иметь одинаковые имена полей в вашей модели.

...