前提・実現したいこと
Railsで条件で絞り込んだCSVファイルを出力したい
こちらのWebページを参考に、RailsでCSV出力機能を実装しています。
【CSV.generate】RailsでCSVファイルを出力する方法
発生している問題
Viewからlink to、GETメソッドを使ってフォームの値がURLパラメーターとして送信できない。
該当のソースコード
上記ページ、こちらのコードの @users = User.all
の部分を、@users = User.Where(name: params[:name])
として
viewから渡ってきたパラメーターにより条件で絞り込んだCSVファイルを作成したいです。
require 'csv' class UsersController < ApplicationController # GET /users # GET /users.json def index @users = User.all respond_to do |format| format.html format.csv do |csv| send_users_csv(@users) end end end def send_users_csv(users) csv_data = CSV.generate(row_sep: "\r\n", encoding:Encoding::CP932) do |csv| header = %w(名前 住所 電話番号 性別 メールアドレス メール受信) csv << header users.each do |user| values = [user.name,user.address,user.phone,user.sex,user.mail_address,user.email_permission] csv << values end end send_data(csv_data, filename: "users.csv") end end
View側のlink_to〜の行をform_withで作ったファイルに設置し、フォームの入力値(@name)をURLパラメーターとして
送信できるよう name: #{@name}
のように記述しましたが、値が引き渡せないです(空になります)
※name: "hogehoge"
と直接値を入れた場合は、パラメーターが生成されますが。
この記述に誤りがありますでしょうか。
<%= link_to "CSV出力",users_path(format: :csv, name: #{@name}) %>
追記:view側のコード(_form.html.erb)
<section class="content"> <%= form_with url: files_path, method: :get, local: true do |form| %> <div class="card-body"> <div class="form-group col-sm-6"> <%= form.label :名前 %> <%= form.text_field :name, class:"form-control", placeholder:"名前" %> </div> <div class="card-footer"> <%= link_to "CSV出力", files_path(format: :csv, name:#{@name}), class:"btn btn-primary" %> </div> <% end %> </section>
回答1件
あなたの回答
tips
プレビュー