5

Rails 4.0.0 uygulamasında Paperclip'i kullanarak Episode modeline bir video dosyası eklemek istiyorum. Ancak, benim oluşturmak eylem episode_params (ikinci hat) çağrı "Hash içine Sembol örtülü hiçbir dönüşüm" bir hata alıyorum:Raylar 4'deki bir video dosyasına Paperclip'i kullanma - güçlü parametreler sorunu mu var?

def create 
@episode = Episode.new(episode_params) 

respond_to do |format| 
    if @episode.save 
    format.html { redirect_to @episode, notice: 'Episode was successfully created.' } 
    format.json { render action: 'show', status: :created, location: @episode } 
    else 
    format.html { render action: 'new' } 
    format.json { render json: @episode.errors, status: :unprocessable_entity } 
    end 
end 

Benim episode_params yöntemi:

def episode_params 
    params.require(:episode).permit(:name, :number, :description, :tag_list, :video => [:tempfile, :original_filename, :content_type, :headers]) 
end 

Ve parametreler karma:

{"utf8"=>"✓", "authenticity_token"=>"VbOJvzWjlXMHOYpYMkwXUfdUxm9OcQx3LTMIJzk5eJQ=", "episode"=>{"name"=>"Test Episode 2", "number"=>"2", "description"=>"Testing Paperclip with video files", "tag_list"=>"test, file, video", "video"=>#<ActionDispatch::Http::UploadedFile:0x007fec361a80e0 @tempfile=#<Tempfile:/var/folders/yt/prn3v4gx3_bcrq8kr6wlfjjw0000gn/T/RackMultipart20130817-15917-1gu47ht>, @original_filename="file.mov", @content_type="video/quicktime", @headers="Content-Disposition: form-data; name=\"episode[video]\"; filename=\"file.mov\"\r\nContent-Type: video/quicktime\r\n">}, "commit"=>"Create Episode", "action"=>"create", "controller"=>"episodes"} 

Ben de sadece ile denedim: videonun => [vb: yerine videosu ] hayır şanssız. Herhangi bir fikir çok takdir edilecektir.

Tam backtrace:

TypeError - no implicit conversion of Symbol into Hash: 
    paperclip (3.5.1) lib/paperclip/attachment.rb:72:in `initialize' 
    paperclip (3.5.1) lib/paperclip/has_attached_file.rb:46:in `block in define_instance_getter' 
    paperclip (3.5.1) lib/paperclip/has_attached_file.rb:65:in `block in define_setter' 
    activerecord (4.0.0) lib/active_record/attribute_assignment.rb:42:in `_assign_attribute' 
    activerecord (4.0.0) lib/active_record/attribute_assignment.rb:29:in `block in assign_attributes' 
    activerecord (4.0.0) lib/active_record/attribute_assignment.rb:23:in `assign_attributes' 
    activerecord (4.0.0) lib/active_record/core.rb:192:in `initialize' 
    activerecord (4.0.0) lib/active_record/inheritance.rb:27:in `new' 
    app/controllers/episodes_controller.rb:34:in `create' 
    actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
    actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action' 
    actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action' 
    actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action' 
    activesupport (4.0.0) lib/active_support/callbacks.rb:413:in `_run__3623801457634608219__process_action__callbacks' 
    activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks' 
    actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action' 
    actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action' 
    actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action' 
    activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument' 
    activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
    activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument' 
    actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
    actionpack (4.0.0) lib/action_controller/metal/params_wrapper.rb:245:in `process_action' 
    activerecord (4.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
    actionpack (4.0.0) lib/abstract_controller/base.rb:136:in `process' 
    actionpack (4.0.0) lib/abstract_controller/rendering.rb:44:in `process' 
    actionpack (4.0.0) lib/action_controller/metal.rb:195:in `dispatch' 
    actionpack (4.0.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' 
    actionpack (4.0.0) lib/action_controller/metal.rb:231:in `block in action' 
    actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch' 
    actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:48:in `call' 
    actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call' 
    actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call' 
    actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call' 
    warden (1.2.3) lib/warden/manager.rb:35:in `block in call' 
    warden (1.2.3) lib/warden/manager.rb:34:in `call' 
    rack (1.5.2) lib/rack/etag.rb:23:in `call' 
    rack (1.5.2) lib/rack/conditionalget.rb:35:in `call' 
    rack (1.5.2) lib/rack/head.rb:11:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call' 
    rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context' 
    rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call' 
    activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call' 
    activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call' 
    activerecord (4.0.0) lib/active_record/migration.rb:369:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 
    activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__4451766820120855143__call__callbacks' 
    activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks' 
    actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call' 
    better_errors (0.9.0) lib/better_errors/middleware.rb:84:in `protected_app_call' 
    better_errors (0.9.0) lib/better_errors/middleware.rb:79:in `better_errors_call' 
    better_errors (0.9.0) lib/better_errors/middleware.rb:56:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app' 
    railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call' 
    activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged' 
    activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged' 
    activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged' 
    railties (4.0.0) lib/rails/rack/logger.rb:21:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
    rack (1.5.2) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.5.2) lib/rack/runtime.rb:17:in `call' 
    activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call' 
    rack (1.5.2) lib/rack/lock.rb:17:in `call' 
    actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call' 
    railties (4.0.0) lib/rails/engine.rb:511:in `call' 
    railties (4.0.0) lib/rails/application.rb:97:in `call' 
    rack (1.5.2) lib/rack/lock.rb:17:in `call' 
    rack (1.5.2) lib/rack/content_length.rb:14:in `call' 
    rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service' 
    /Users/timhusson/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service' 
    /Users/timhusson/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run' 
    /Users/timhusson/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 
+0

Param hash gösterebilir misin? –

+0

Videonuz için iç içe geçmiş bir kaynak kullanıyor musunuz? Veya, senin, senin, içinde, has_attached_file: video olarak mı temsil ediliyor? – Senjai

+0

Lütfen tam bir backtrace sağlayabilir misiniz? – Intrepidd

cevap

0

Hrm, "accepts_nested_attributes_for: video" İhtiyacınız yapmak sizin bölüm modelinde? Ataçmanın örtbas edip etmediğinden emin değil. Ayrıca güçlü params Eğer deneyebilirsiniz:

sizin strong_params soruya gelince
params.require(:episode).permit(:name, :number, :description, :tag_list, :video_attributes => [:tempfile, :original_filename, :content_type, :headers]) 
1

, sen ataç ekin sadece adını listelenmelidir. Eğer params yakından bakarsanız eğer parametreler ... Bu gibi görünmek O halde ... Alec sınıf aşağıdaki gibi görünecek

class Episode 
    has_attached_file :video, ... options ... 
end 

gerektiğini varsayarsak

def episode_params 
    params.permit(:episode).permit(:name, :number, :description, :tag_list, :video) 
end 

Aslında bu bir anlamda alabilirsiniz karması. : Video öğesi, bazı özellikleri olan tek bir nesnedir. Strong_params rayları sadece tek bir nesne olduğuna ve bir tamsayı ya da dizgiye benzediğine bakar, böylece yalnızca bu özelliğe izin vermeniz gerekir. Bazı yerlerde gayet iyi çalışan bir şey var.

Params sorunu değil, ancak.

Backtrace'e bakarsanız, hata Paperclip :: Attachment # initialize kaynağından geliyor. Özellikle, başvurulan çizgi (# 72) der ki: Bu konuda düşünüyorsanız bağlamında anlamda bir çok yapar

options = self.class.default_options.merge(options) 

. Hata, bir Sembolü bir Hash’e dönüştüremediğinizi belirtiyor. Büyük ihtimalle bu, yukarıdaki ifadenin "birleştirme (seçenekler)" çağrısında bir Sembol alması anlamına gelir. Sonuçta bu muhtemelen, sınıf tanımındaki has_attached_file çağrınızın yanlış biçimlendirilmiş olduğu anlamına gelir.

0

Sizin: default_url değerinizin geçerli bir yola ayarlandığından emin olun. Aynı problemi yaşadım ve geçerli bir yol belirleyerek çözdüm.

İlgili konular