使用表单运行rake任务

时间:2013-04-10 15:49:13

标签: ruby-on-rails

我创建了一个带参数的rake任务。我可以使用rake my_task["args"]在命令行中运行此rake任务。

我现在正在尝试使用文本字段和按钮创建表单。单击该按钮时,rake任务应该以textfield的内容作为任务的参数运行。

我如何获得一个rails表单(form_tag,我相信,它与任何资源无关)以这种方式运行,如何在按钮点击时运行rake任务?

我不确定会发生什么,所以如果你可以指明说明应该在哪里,那对我来说将是一个巨大的帮助。

1 个答案:

答案 0 :(得分:3)

rake任务是服务器脚本,因此您需要遵循的模式如下所示。

1)用户请求具有文本字段和提交按钮的表单(controller#new)

2)用户点击提交给您的rails应用程序(控制器#create)

的表单

3)控制器操作使用'system'方法运行rake任务,并从表单中传递参数:

class MyController  < ApplicationController
  def new
  end

  def create
    system "rake my_task", params[:args]
  end
end

在新视图中,您将使用form_tag创建表单,使用参数的text_field_tag,以及按钮的submit_tag,如下所示

<%= form_tag my_rake_task_path, :method => 'post' do %>
   <%= text_field_tag :args %>
   <%= submit_tag "Run Task" %>
<% end %>

如果仔细观察,您会看到表单标记使用的是名为my_rake_task_path的方法。这是一个命名的路由助手。要创建它,您必须在路径文件中添加条目,如

get 'rake_task', to: 'mycontroller#new'
post 'rake_task', to: 'mycontroller#create', :as => 'my_rake_task'

如果您想了解有关在控制器中运行rake任务的更多信息,请查看此railscast http://railscasts.com/episodes/127-rake-in-background