我有一个表单来上传文件。当我按下提交按钮时,我想在控制器中调用特定方法。这可能是一件非常简单的事情,但我真的很喜欢rails。
我的videos_controller中有一个名为“upload_translation_handwritten”的方法
这是我的表格:
%form{role: 'form'}
.form-group
%label.h4{for: "handwrittenTranslation"} Upload Handwritten Translation
%input#inputFile{name: 'translation', type: "file"}
%button.btn.btn-default{type: "submit"} Upload
我有一条路线:
match 'users/:id/videos/:video_id/translate_video_handwritten' => 'videos#upload_translation_handwritten', via: 'post', as: :upload_translation_handwritten
我已经在'users /:id / videos /:video_id / translate_video_handwritten'并且我想调用另一种方法做一些事情然后用一点flash消息重定向到同一页面。现在,当我点击“上传”时,没有任何反应:(
提前致谢!
答案 0 :(得分:0)
rails convention
检查表单操作(路由)和方法(发布)
<form action="this" method="and this">...</form>
在routes.rb
中 match "**/videos/:video_id" => "vidoes#edit", :as => :get # upload form as html
match "**/videos/:video_id/upload" => "videos#upload", :as => :post # upload and redirect with flash
在videos_controller.rb中
def upload
...
flash[:msg] = "Not suppported video format"
render "edit"
end
在upload_form.html.haml
中- if flash[:msg]?
= flash[:msg]
答案 1 :(得分:0)
您需要为属性操作添加网址。在你的情况下,我认为它是%form{role: 'form', action: upload_translation_handwritten_user_video_path(user_id, video_id), method: :post}
。请运行rake routes
以查看正确的命名助手
答案 2 :(得分:0)
您的路线仅指向POST方法, 你也必须接受GET方法。 将您的路线改为
match 'users/:id/videos/:video_id/translate_video_handwritten' => 'videos#upload_translation_handwritten', as: :upload_translation_handwritten
然后,您可以查看表单,无需在表单中执行操作,
像这样更新你的控制器
def upload_translation_handwritten
# Perform Your actions for both GET and POST
# check with
if request.post?
# Add codes for actions after submission of form
else
# render your form
end
end
答案 3 :(得分:0)
我最后修改了它:
%form{role: 'form'}
要
=form_tag(:action => 'upload_translation_handwritten', :method => 'post')
谢谢大家的帮助!!