1

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

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

如何让 aa rails 表单(我相信它与任何资源无关)以这种方式运行,以及如何在单击按钮时运行 rake 任务?

我不确定去哪里,所以如果你能指定说明应该在哪里,这对我来说将是一个巨大的帮助。

4

1 回答 1

3

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

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

2) 用户在向您的 Rails 应用程序发出请求的表单上点击提交 (controller#create)

3) 控制器操作使用“系统”方法运行 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

于 2013-04-10T16:17:41.013 回答