在我的 Rails 应用程序中,我有一个应该通过 ajax 提交的表单(remote 设置为 true)。该表单允许用户添加嵌入式视频或将视频文件上传到应用程序。我通过在模式中使用引导选项卡创建了表单。
当我使用表单中的第一个选项卡提交嵌入视频时,表单已成功处理为 JS。但是,当我尝试使用表单中的第二个选项卡上传视频时,表单被错误地处理为 HTML。
如何确保表单始终作为 JS 处理?
看法:
<%= semantic_form_for Video.new,
:html => {:id => "videoEmbedModal", :class => "modal hide fade embedModal"},
:remote => true do |video_form| %>
<%= video_form.input :project_id, :as => :hidden, :label => false, :input_html => {:value => @project.id} %>
<% if @step.new_record? %>
<%= video_form.input :step_id, :as => :hidden, :label => false, :input_html => {:value => -1} %>
<%= video_form.input :saved, :as => :hidden, :label => false, :input_html => {:value => false} %>
<% else %>
<%= video_form.input :step_id, :as => :hidden, :label => false, :input_html => {:value => @step.id} %>
<%= video_form.input :saved, :as => :hidden, :label => false, :input_html => {:value => true} %>
<% end %>
<div class="modal-header">
<h3>Add a Video</h3>
</div>
<div class="modal-body">
<div class="tabbable">
<ul class="nav nav-tabs" id="add_video_tabs">
<li class="active">
<a href="#embed_video">Embed Video</a>
</li>
<li>
<a href="#upload_video">Upload Video</a>
</li>
</ul>
<div class="tab-content" style="margin-top: 10px;">
<% # add embedded video tab %>
<div class="tab-pane active" id="embed_video">
<%= video_form.label "Video URL", :class=> "label" %><span style="font-size:smaller; color: #7E7E7E; margin-left:10px">We currently support Youtube and Vimeo</span>
<%= video_form.text_area :embed_url,
:placeholder => "Example: http://www.youtube.com/watch?v=bVj85o5hA_Q", :rows=>"2", :cols=>"50" %>
<div class="supportedVideo">
<i class="icon-youtube" style="font-size: 25px"></i> <%= image_tag "icons/Vimeo.png", :class=>"vimeo_icon" %><br>
</div>
<div class="embedPreview">
<h3>Video Preview</h3>
</div>
</div>
<% # upload video tab %>
<div class="tab-pane" id="upload_video">
<div class="supported-video-files">
We support .mp4, .mov, and .avi video files.
</div>
<div id="uploadVideoField">
<%= video_form.file_field :video_path, :class=>"video_file_upload_field", :onchange=> "return validateFileExtension(this)" %>
</div>
<div class="btn btn-warning btn-small" style="margin-top:10px; display:none;">Remove</div>
<br>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<%= video_form.actions do %>
<%= video_form.action :cancel, :label => "Close", :as => :link,
:button_html => {:class => "btn modal_close_btn", :href => "#",
:data => {:target => "#videoEmbedModal", :toggle => "modal"}} %>
<%= video_form.action :submit, :label => "Save", :as => :button,
:button_html => {:class => "btn btn-primary", :id => "video_submit", :disable_with => "Saving..."}, :disable_with => "Saving..." %>
<% end %>
<div class="loadingIcon"></div>
</div>
<% end %>
添加嵌入视频的日志消息:
Started POST "/videos" for 127.0.0.1 at 2013-10-16 13:52:51 -0400
Processing by VideosController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"YuHlkYWPJK7oAkKXoLAebUQLGWuTrX/RMabOzLfITkM=", "video"=>{"project_id"=>"13", "step_id"=>"-1", "saved"=>"false", "embed_url"=>"http://vimeo.com/73388765"}, "button"=>""}
![][2]
添加上传视频的日志消息:
Running transcoding...
ffmpeg -y -i /public/uploads/tmp/1381945989-16853-6328/Untitled.mov -vcodec libx264 -acodec libfaac -s 640x360 -qscale 0 -preset slow -g 30 -aspect 1.7777777777777777 /public/uploads/tmp/1381945989-16853-6328/tmpfile.mp4
Transcoding of /public/uploads/tmp/1381945989-16853-6328/Untitled.mov to /public/uploads/tmp/1381945989-16853-6328/tmpfile.mp4 succeeded
Started POST "/videos" for 127.0.0.1 at 2013-10-16 13:53:09 -0400
**Processing by VideosController#create as HTML**
Parameters: {"utf8"=>"✓", "authenticity_token"=>"YuHlkYWPJK7oAkKXoLAebUQLGWuTrX/RMabOzLfITkM=", "video"=>{"project_id"=>"13", "step_id"=>"-1", "saved"=>"false", "embed_url"=>"", "video_path"=>#<ActionDispatch::Http::UploadedFile:0x007f8a11393cd8 @original_filename="Untitled.mov", @content_type="video/quicktime", @headers="Content-Disposition: form-data; name=\"video[video_path]\"; filename=\"Untitled.mov\"\r\nContent-Type: video/quicktime\r\n", @tempfile=#<File:/var/folders/dc/c0nfvwy96lq7p4ll94mklnmr0000gp/T/RackMultipart20131016-16853-qmwjfn>>}, "button"=>""}
编辑 我完全删除了嵌入的视频选项卡,只是尝试使用文件字段提交视频,它仍然被作为 HTML 处理。所以我认为问题与表单在选项卡中的设置方式无关。我认为这可能与我用来上传视频文件(carrierwave-video)的宝石有关,但我仍然不确定,所以如果有人能够阐明任何观点,将不胜感激!