从表单中调用方法 - rails

时间:2013-12-05 02:50:38

标签: ruby-on-rails

我有一个表单来上传文件。当我按下提交按钮时,我想在控制器中调用特定方法。这可能是一件非常简单的事情,但我真的很喜欢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消息重定向到同一页面。现在,当我点击“上传”时,没有任何反应:(

提前致谢!

4 个答案:

答案 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')

谢谢大家的帮助!!