[fix] csv出力されるようにoutput_csv_controllerを修正#1999
Conversation
There was a problem hiding this comment.
Pull request overview
このPRの目的は、API側のCSV出力エラー(特にBOMの扱いに起因するもの)を解消し、年度指定時にも正しくCSVを出力できるようにすることです。
Changes:
- 全てのCSV出力メソッドで、BOM(
\uFEFF)の付与方法を変更し、CSV.generate(bom)からbom + CSV.generate形式へ書き換え。 output_assign_rental_items_csvにおいて、年度指定時のデータ取得をGroup.whereからAssignRentalItem.joins(:group).where(groups: { fes_year_id: ... })に修正し、年度で正しく絞り込めるように変更。
| end | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
ここでも csv_data = bom + CSV.generate do |csv| ... end という書き方になっており、do...end ブロックが CSV.generate ではなく + 演算子側に結び付くため、CSV 生成ブロックが実行されない構文上の問題があります。CSV.generate にブロックを正しく渡せるように、{} ブロックに変えるか、括弧で囲むなどして式を書き換えてください。
| end | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
ここも bom + CSV.generate do |csv| という形になっており、do...end ブロックが CSV.generate ではなく + に結合されるため、CSV 生成用ブロックが実行されません。電力申請 CSV が出力されない原因になるので、CSV.generate にブロックが渡るように {} ブロックや括弧を用いた安全な書き方に変更してください。
| end | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
ここも他と同様に bom + CSV.generate do |csv| という構文になっており、do...end ブロックが + 側に結合されてしまうため、ステージ申請 CSV の生成処理が実行されません。CSV.generate へブロックを渡すよう、ブロックを {} に変更するか括弧を追加するなどして式を修正する必要があります。
|
|
||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
この csv_data = bom + CSV.generate do |csv| も他と同様に、do...end ブロックが + に紐づいて CSV.generate がブロック無しで呼ばれてしまうため、連絡先リストの CSV が生成されません。CSV.generate にブロックを正しく渡すように、ブロックの種類や括弧の付け方を見直してください。
| @cooking_process_orders = CookingProcessOrder.includes(:group, :food_product).all | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
csv_data = bom + CSV.generate do |csv| の形だと、Ruby の仕様上ブロックが + に紐づき、CSV.generate はブロック無しで実行されるため、調理工程申請 CSV が生成されません。この問題を避けるために、CSV.generate に直接ブロックを渡す形に書き換えてください({} ブロックの利用や括弧でのグルーピングなど)。
| end | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
csv_data = bom + CSV.generate do |csv| という書き方だと、ブロックが CSV.generate ではなく + に結合されてしまい、購入品申請 CSV の行を積むブロックが動作しません。CSV.generate にブロックが渡るようにブロック構文を {} に変える、もしくは括弧を追加するなどして式を修正する必要があります。
| end | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
csv_data = bom + CSV.generate do |csv| という書き方だと、Ruby のブロック結合規則により do...end が + に紐づき、CSV.generate がブロック無しで呼び出されてしまいます。このままだとレンタル物品 CSV が空になる/例外になる可能性があるため、CSV.generate 側にブロックが渡るようにブロック記法を {} に変えるか、括弧で式を明示的にグルーピングするよう修正してください。
| end | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
この行も bom + CSV.generate do |csv| という記述のため、CSV 生成ブロックが CSV.generate に渡らず、+ 演算子側に結合される構文上の問題があります。従業員申請 CSV が正しく出力されるよう、CSV.generate にブロックが渡る形({} ブロックや括弧でのグルーピングなど)に修正してください。
| @announcements = Announcement.all | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
ここも csv_data = bom + CSV.generate do |csv| という構文により、do...end ブロックが CSV.generate ではなく外側の + に紐づいてしまい、会場アナウンス CSV の内容を出力するブロックが実行されません。CSV.generate 側にブロックが渡るように、{} ブロックを使うか括弧を付けるなどして式を修正してください。
| end | ||
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
この行の csv_data = bom + CSV.generate do |csv| でも、do...end ブロックが + に結合されるため、参加団体PR申請 CSV の出力ロジックが実行されません。CSV.generate にブロックが正しく渡るよう、ブロック構文({})や括弧を用いて式を修正する必要があります。
| filename_year = '全' | ||
| else | ||
| @assign_rental_items = Group.where(fes_year_id: params[:fes_year_id]) | ||
| @assign_rental_items = AssignRentalItem.joins(:group).where(groups: { fes_year_id: params[:fes_year_id] }) |
There was a problem hiding this comment.
AssignRentalItem.joins(:group) は関連を eager load しないので、この後の assign_rental_item.group / rental_item / stocker_place 参照でレコード数分の追加クエリ(N+1)が発生します。CSV出力は件数が多くなりがちなので、includes(必要なら references)で必要な関連(例: :group, :rental_item, :stocker_place など)を事前ロードする形にすると安定します。
|
BOMってcsv形式のものをexcelで開こうとしたときに必要って認識なんだけどこのissueってそういう系? |
|
@hikahana 該当箇所は output_csv_controller.rb にあった次の形です。 bom + CSV.generate do |csv| ... end 要するに、gm3/develop で出力されなかった主因は「ブロックの結び先ミス」です。 |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.
You can also share your feedback on Copilot code review. Take the survey.
| bom = "\uFEFF" | ||
| csv_data = CSV.generate(bom) do |csv| | ||
| csv_data = bom + CSV.generate do |csv| |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.
You can also share your feedback on Copilot code review. Take the survey.
対応Issue
resolve #1998
概要
実装詳細
画面スクリーンショット等
テスト項目
備考