我创建了一个带参数的rake任务。我可以使用rake my_task["args"]
在命令行中运行此rake任务。
我现在正在尝试使用文本字段和按钮创建表单。单击该按钮时,rake任务应该以textfield的内容作为任务的参数运行。
我如何获得一个rails表单(form_tag,我相信,它与任何资源无关)以这种方式运行,如何在按钮点击时运行rake任务?
我不确定会发生什么,所以如果你可以指明说明应该在哪里,那对我来说将是一个巨大的帮助。
答案 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