【发布时间】:2021-09-06 10:39:52
【问题描述】:
首先,我接到了任务
- 在用户列表上方添加导出按钮
- 单击该按钮应下载一个 显示用户字段的 CSV 文件 页面
app/controllers/admins/users_controller.rb
def index
@users = User.all
respond_to do |format|
format.html
format.csv { send_data @users.to_csv(['email']) }
end
app/models/user.rb
def self.to_csv(fields = column_names, options = {})
CSV.generate(options) do |csv|
csv << fields
all.each do |user|
csv << user.attributes.values_at(*fields)
end
end
结束
app/views/layouts/admin.html.erb
<%= form_tag import_admins_users_path, multipart: true, class: 'form-inline' do %>
<div class="form-group">
<%= link_to "Export CSV", admins_users_path(format: "csv"), class: 'btn btn-primary' %>
</div>
<% end %>
config/routes.rb
namespace :admins do
resources :users do
collection { post :import }
end
结束
方法to_csv不应在模型中
如何将其留在控制器中??
【问题讨论】:
-
我不确定我是否理解您的问题——“
to_csv方法在控制器中,而不是模型中”?为什么?您当前的实施是否有问题?看来您已经成功解决了最初的任务? -
to_csv方法看起来并不真正属于控制器,也不是真正的模型方法。 IMO 它应该是一个视图(鉴于它的工作似乎是格式化和传递数据)或一个普通的 ruby 对象。
标签: ruby-on-rails ruby export-to-csv