我的项目目前配置为只有一个视图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
当与我的桌子交互以转到另一页时,我的路线没有指定的指令:
获取“/?page =(pagenumber)”
我不知道要告诉它要做什么才能显示正确的页面。
它只是默认重定向到import_page
,它会清除已导入的所有数据。我该如何解决这个问题?
答案 0 :(得分:0)
简而言之,您可能希望使用singular resource来实现此目的。
所以你需要以下内容:
在routes.rb
:
resource :uploader, only: [:show, :create]
(N.B。这是与更常见的resources
复数不同的用例。)
这将为您提供以下路线:
POST /upload uploads#create # create the new upload
GET /upload uploads#show # display the one and only upload resource
在您的控制器中:
class UploadController < ApplicationController
require "csv"
require 'will_paginate/array'
def create
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
# save the file to the db
# redirect to upload_path
end
def show
# Find the relevant table
@table = Table.last.paginate(page: params[:page], :per_page => 20)
end
end
然后您需要在视图中修改表单以使用@table
,例如:
...
<%= form_for @table, multipart: true) do %>
<%= f.file_field :file %>
<%= f.submit "Import" %>
<% end %>
...
这是您的项目应如何运作的基本摘要。它的关键是使用正确的单独动作来创建和显示表格。
您可能希望查看使用strong params和其他Rails约定。
最后,如果有帮助,请查看生成的Rails控制器(即rails generate controller my_example_controller
) - 这将预先构建create
和show
个动作,您可以查看将代码合并到类似的东西中。
希望这有帮助 - 如果您有任何问题,请给我一个喊叫。