5

Tôi muốn thêm tệp video vào mô hình Tập bằng ứng dụng Paperclip trong ứng dụng Rails 4.0.0. Tuy nhiên, tôi nhận được một lỗi "không chuyển đổi ngầm của Symbol vào Hash" khi tôi gọi episode_params trong tạo hành động của tôi (dòng thứ hai):Sử dụng Kẹp giấy trên tệp video trong Rails 4 - sự cố thông số mạnh?

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 

cuối

episode_params My phương pháp:

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

Và thông số băm:

{"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"} 

Tôi cũng đã thử chỉ với: video thay vì: video => [v.v. ] không có may mắn. bất kì ý kiến ​​nào đều được đánh giá cao.

Full 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

bạn có thể hiển thị thông số băm không? –

+0

Bạn có đang sử dụng tài nguyên lồng nhau cho video của mình không? Hoặc là nó đại diện trong Eps của bạn như has_attached_file: video? – Senjai

+0

Bạn có thể vui lòng cung cấp một backtrace đầy đủ? – Intrepidd

Trả lời

0

HRM, bạn cần "accepts_nested_attributes_for: video" trong mô hình tập của bạn? Bạn không chắc chắn nếu kẹp giấy bao phủ hay không. Cũng trong các thông số mạnh mẽ của bạn, bạn có thể thử:

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

Đối với câu hỏi strong_params, bạn chỉ nên liệt kê tên của tệp đính kèm kẹp giấy. Giả sử rằng lớp AREC của bạn trông như thế này ...

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

Sau đó params của bạn sẽ trông như thế này ...

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

Bạn thực sự có thể nhận được một cảm giác này nếu bạn nhìn kỹ vào các params băm. Mục video: là một đối tượng có một số thuộc tính trên đó. Đường ray strong_params chỉ quan tâm rằng đó là một đối tượng duy nhất và xử lý nó như một số nguyên hoặc chuỗi, do đó bạn chỉ cần cho phép thuộc tính đó. Tôi đã có loại điều đó làm việc tốt ở một số nơi.

Params không phải là vấn đề của bạn, tuy nhiên.

Nếu bạn nhìn vào backtrace, lỗi đến từ Paperclip :: Attachment # initialize. Cụ thể, dòng được tham chiếu (# 72) cho biết:

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

Điều đó có ý nghĩa rất nhiều trong ngữ cảnh nếu bạn nghĩ về nó. Lỗi này cho bạn biết rằng bạn không thể biến một Symbol thành Hash. Nhiều khả năng điều đó có nghĩa là câu lệnh trên nhận được một Biểu tượng trong cuộc gọi đến "hợp nhất (tùy chọn)". Cuối cùng, điều này có thể có nghĩa là cuộc gọi has_attached_file của bạn trong định nghĩa lớp được định dạng không đúng.

0

Đảm bảo rằng: giá trị default_url của bạn được đặt thành đường dẫn hợp lệ. Tôi đã có cùng một vấn đề chính xác và giải quyết nó bằng cách thiết lập một đường dẫn hợp lệ.

Các vấn đề liên quan