【问题标题】:Routing to a special controller action路由到一个特殊的控制器动作
【发布时间】:2021-12-20 23:11:11
【问题描述】:

我想要一个按钮来选择一个 zip 文件、解压缩、处理其中一个文件并将数据添加到数据库中。我被困在控制器操作上。

bp_stats.controller

def import_data
  puts "Massage and import data here"
end

routes.rb

get 'import_data', to: 'bp_stats#import_data'

_import_data.html.erb中的导入按钮:

<%= form_tag( action: :import_data, controller: 'bp_stats' ) do %>
  <%= file_field_tag :filename %>
  <%= submit_tag( "Import" ) %>
<% end %>

我收到了这个错误

ActionController::RoutingError (No route matches [POST] "/import_data"):

【问题讨论】:

  • 我建议了解 rake 任务在做什么,按什么顺序调用哪些方法,然后在控制器中以相同的顺序调用它。
  • @HarshKumar。谢谢你的回答。我无法理顺路线。我更新了原帖。

标签: ruby-on-rails routes controller


【解决方案1】:

你的路线说

get 'import_data', to: 'bp_stats#import_data'

这显然是获取请求路由而不是发布请求,您需要将其更改为使用 post 发布请求的路由

post 'import_data', to: 'bp_stats#import_data'

【讨论】:

  • 谢谢。从错误中可以看出,但我有点在树林里。现在开始整理我可以使用 Rake 任务完成的导入数据的处理。除非这不是解决问题的方法。
  • @Greg rake 任务作为后台作业运行是可行的方法
  • 那可以由控制器触发吗?
  • @Greg 看看delayed_job,工作队列等...您的控制器操作可以调用模型方法将作业添加到队列中,延迟的作业可以在后台挑选作业并开始工作,从而毫不拖延地将用户返回到网站。一个开始的地方可能是谷歌 railscasts delayed_job.,它很老,但它会给你这个想法
  • 谢谢。我会去做。我已经为这个小应用使用了旧的 Railscasts
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 2018-06-04
  • 2018-02-21
  • 2011-12-11
相关资源
最近更新 更多