【发布时间】:2018-08-24 12:20:37
【问题描述】:
我的项目当前配置为只有一个视图import.html,允许用户上传和查看 CSV 文件的内容(上传后)。
这里是控制器类的导入方法:
class UploadController < ApplicationController
require "CSV"
require 'will_paginate/array'
def import
return if params[:file] == nil
file = params[:file]
@table = []
rowi = 0
CSV.foreach(file.path) do |row|
if rowi == 0 #and headers (for later)
@headers = row
else
@table << row.join("~")
end
rowi = rowi + 1
end
@table = @table.paginate(page: params[:page], :per_page => 20)
session
end
end
这里是视图:
<h1>Upload#import</h1>
<h4>UPLOAD A CSV FILE:</h4>
<%= form_tag({:action => "import"}, multipart: true) do %>
<%= file_field_tag :file %>
<%= submit_tag( "Import" ) %>
<% end %>
<% if @headers and @table %>
<h1>RESULTS</h1>
<table>
<thead>
<tr>
<% @headers.each do |column| %>
<td><%= column %></td>
<% end %>
</tr>
</thead>
<tbody>
<% @table.each do |row| %>
<tr>
<% row.split("~").each do |cell| %>
<td><%= cell %></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
<%= will_paginate @table, inner_window: 1, outer_window: 0%>
<% end %>
路线如下:
Rails.application.routes.draw do
root 'upload#import'
post "/" => "upload#import"
end
当与我的表格交互以转到不同的页面时,我的路线没有指定指令:
GET "/?page=(pagenumber)"
我不知道该怎么告诉它才能显示正确的页面。
它只是默认重定向到import_page,它会清除所有已导入的数据。我应该如何解决这个问题?
【问题讨论】:
-
您确实应该为
post请求提供单独的路由来上传和保存文件,并在get请求中显示内容。基本上,您会将保存文件的代码拆分为post操作,并将表生成拆分为get。然后get页面的表单将点击post操作,如果成功,它将重定向回get端点。 -
表生成并没有真正委托给一个动作。你能评论一下我的路线会是什么样子吗?我是否需要添加另一个视图来处理分页结果?
-
我添加了一个答案,涵盖了创建和显示资源的基本结构。告诉我它有什么帮助!
标签: ruby routes ruby-on-rails-5 will-paginate