やりたいこと
railsでcsvダウンロード機能を実装したいです。
テーブル情報
ゴリラマスターテーブル 1 対 多 ゴリラアイテムマスターテーブル
このような関係となっています。
また、ゴリラマスターテーブルはancestryカラムがあり、この中の子とゴリラアイテムマスターのレコードを結合させてcsvをダウンロードできるようにしたいです。
現状のソースコード
ruby
1 2class Hr::GoriraMastersController < Hr::Base 3 before_action :authorize_staff! 4 before_action :set_gorira_master, only: %i[show edit update destroy] 5 6## 省略 7 8 def show 9 if @gorira_master.parent_id == nil 10 @gorira_master_childrens = @gorira_master.children.where(corporation_id: @gorira_master.corporation_id).page(params[:page]) 11 else 12 @gorira_item_masters = @goriral_master.gorira_item_masters.page(params[:page]).per(10) 13 end 14 respond_to do |format| 15 format.html 16 format.csv { send_data @gorira_master_childrens.generate_csv, filename: "gorira-#{Time.zone.now.strftime('%Y%m%d')}.csv" } 17 end 18 19## 省略 20 21 private 22 def set_gorira_master 23 @gorira_master = current_corporation.gorira_masters.find(params[:id]) 24 end 25end
ruby
1class GoriraMaster < ApplicationRecord 2 has_ancestry 3 has_many :gorira_item_masters, dependent: :destroy 4 has_many :goriras, dependent: :destroy 5 6 validates :name, presence: true 7 8 def self.generate_csv 9 bom = "\uFEFF" 10 CSV.generate(bom) do |csv| 11 csv << %w[ゴリラ名, ゴリラアイテム名, ゴリラアイテム年齢, ゴリラアイテム属性] 12 13 all.find_each do |item| 14 values = [item.name] 15 csv << values 16 end 17 end 18 end 19 20end
わからないこと
GoriraMastersController内のcsv関連の記述がわかりません。親テーブルの子と子テーブルをつなげる記述はどのように書くのでしょうか?
format.csv { send_data @gorira_master_childrens.generate_csv, filename: "gorira-#{Time.zone.now.strftime('%Y%m%d')}.csv" }
また、モデルのメソッド内にもなにか記述が必要なのでしょうか???
宜しくお願いいたします。
あなたの回答
tips
プレビュー