質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

4回答

843閲覧

Excel出力のparamsのidがcheck_boxから取得できません

makox0105

総合スコア65

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2019/08/20 12:03

編集2019/08/22 04:22

前提・実現したいこと

Ruby on RailsでrubyXLを使ってxlsxテンプレートに出力したいのですが、check_boxのチェックの入った行だけをExcelに出力したい

発生している問題・エラーメッセージ

空の状態で出力される。

該当のソースコード

controller

1def index 2 @q = List.search(params[:q]) 3 @lists = @q.result(distinct: true).paginate(:page=> params[:page], :per_page=> 50 ) 4 5 respond_to do |format| 6 format.html 7 format.xlsx do 8 9 require 'rubyXL/convenience_methods' 10 11 workbook = RubyXL::Parser.parse('app/assets/template.xlsx') # app/assetsの下に 12 13 worksheet = workbook[0] 14 15 num = 1 16 @labels = List.where(:id => params[:label_id]) 17 @labels.each{|label| 18 worksheet[num][0].change_contents(label.title) 19 worksheet[num][1].change_contents(label.title_no) 20 num += 1 21 } 22 d = Time.now 23 send_data workbook.stream.read, 24 filename: "ラベル_" + d.strftime("%y%m%d%H%M%S")+".xlsx".encode(Encoding::Windows_31J) 25 end 26 end 27 end

view

1 2~省略~ 3 4<%= form_tag({controller: "lists", action: "index"}, {multipart: true}) do %> 5<div> 6<%= link_to 'ラベル出力', lists_path(format: "xlsx"), data: {confirm: "Exel出力しますか?"}, class: 'btn btn-primary' %> 7</div> 8 9~省略~ 10 11<% @lists.each do |list| %> 12 <tr> 13 <td><%= check_box_tag "label_id[]", list.id %></td> 14 15~省略~ 16 17<% end %>

試したこと

実は同じようなコードを書いたことがありまして、その時はlink_toではなく、submitで処理しました。

補足情報(FW/ツールのバージョンなど)

Rails 4.2.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

<input type="submit"><a>は全く別物です。
リンクではフォームの内容は送信できません。
引数にパラメータを渡してやる必要があります。

投稿2019/08/22 04:41

Mugheart

総合スコア2342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makox0105

2019/08/22 04:58

ありがとうございます。 check_boxからlink_toには渡せないということでしょうか? 知識不足ですみません。
Mugheart

2019/08/22 05:00

渡せません
makox0105

2019/08/22 05:49

submitに変更したら出来ました。 ありがとうございました。
guest

0

link_toをsubmit_tagに変更して、indexからExcelに出力する部分を分けてもろもろ書いたら出来ました。

controller

1def index 2 @q = List.search(params[:q]) 3 @lists = @q.result(distinct: true).paginate(:page=> 4 params[:page], :per_page=> 50 ) 5end 6 7def labels 8 @labels = List.where(:id => params[:label_id]) 9 respond_to do |format| 10 format.html 11 format.xlsx do 12 13 require 'rubyXL/convenience_methods' 14 15 workbook = RubyXL::Parser.parse('app/assets/template.xlsx') 16 17 worksheet = workbook[0] 18 19 num = 1 20 @labels.each{|label| 21 worksheet[num][0].change_contents(label.title) 22 worksheet[num][1].change_contents(label.title_no) 23 num += 1 24 } 25 d = Time.now 26 send_data workbook.stream.read, 27 filename: "ラベル_" + d.strftime("%y%m%d%H%M%S")+".xlsx".encode(Encoding::Windows_31J) 28 end 29 end 30 end

view

1~省略~ 2 3<%= form_tag({format: "xlsx",controller: "lists", action: "labels",method: "post"}, {multipart: true}) do %> 4<div> 5<%= submit_tag 'ラベル出力', data: {confirm: "Exel出力しますか?"}, class: 'btn btn-primary' %> 6</div> 7 8~省略~ 9 10<% @lists.each do |list| %> 11 <tr> 12 <td><%= check_box_tag "label_id[]", list.id %></td> 13 14~省略~ 15 16<% end %>

投稿2019/08/22 10:28

makox0105

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

link_toをsubmit_tagに変更して、indexからExcelに出力する部分を分けてもろもろ書いたら出来ました。

controller

1def index 2 @q = List.search(params[:q]) 3 @lists = @q.result(distinct: true).paginate(:page=> 4 params[:page], :per_page=> 50 ) 5end 6 7def labels 8 @labels = List.where(:id => params[:label_id]) 9 respond_to do |format| 10 format.html 11 format.xlsx do 12 13 require 'rubyXL/convenience_methods' 14 15 workbook = RubyXL::Parser.parse('app/assets/template.xlsx') 16 17 worksheet = workbook[0] 18 19 num = 1 20 @labels.each{|label| 21 worksheet[num][0].change_contents(label.title) 22 worksheet[num][1].change_contents(label.title_no) 23 num += 1 24 } 25 d = Time.now 26 send_data workbook.stream.read, 27 filename: "ラベル_" + d.strftime("%y%m%d%H%M%S")+".xlsx".encode(Encoding::Windows_31J) 28 end 29 end 30 end

view

1~省略~ 2 3<%= form_tag({format: "xlsx",controller: "lists", action: "labels",method: "post"}, {multipart: true}) do %> 4<div> 5<%= submit_tag 'ラベル出力', data: {confirm: "Exel出力しますか?"}, class: 'btn btn-primary' %> 6</div> 7 8~省略~ 9 10<% @lists.each do |list| %> 11 <tr> 12 <td><%= check_box_tag "label_id[]", list.id %></td> 13 14~省略~ 15 16<% end %>

投稿2019/08/22 05:44

makox0105

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一見して原因が掴めないので、1歩ずつ。
params[:label_id] に期待した値が入っているか確認したいので、logのパラメータの部分を見せて下さい。

投稿2019/08/21 14:24

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makox0105

2019/08/22 02:23

コメントありがとうございます。 これで良いでしょうか? idは空っぽなんだと思います。 Started GET "/lists.xlsx" for ::1 at 2019-08-22 11:11:00 +0900 Processing by ListsController#index as XLSX User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 2]] List Load (0.0ms) SELECT "lists".* FROM "lists" WHERE "lists"."id" IS NULL Rendered text template (0.0ms) Sent data ラベル_190822111101.xlsx (1.0ms) Completed 200 OK in 1753ms (Views: 0.7ms | ActiveRecord: 0.0ms)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問