質問編集履歴

1

CSVインポートのコードを追加しました。

2021/02/28 05:30

投稿

pancho
pancho

スコア12

test CHANGED
File without changes
test CHANGED
@@ -28,6 +28,154 @@
28
28
 
29
29
  色々と検索してみるのですが、CSVのインポート機能の実装の記事は有るのですが
30
30
 
31
- 起動時などに「指定場所(社内サーバやPCの指定フォルダー)に有るCSVファイルを読み込みに行く」ような記事を見付ける事が出来ませんした。
31
+ 起動時などに「指定場所(社内サーバやPCの指定フォルダー)に有るCSVファイルを読み込みに行く」ような記事を見付ける事が出来なかったの
32
+
33
+ その部分に対してはまだ実装していません。
32
34
 
33
35
  そのような機能が実装できるのか、そして実装方法が記載されているページのURLなどを教えていただけると幸いです。
36
+
37
+
38
+
39
+ ### ソースコード
40
+
41
+ CSVインポートのコードです。
42
+
43
+
44
+
45
+ model/Cashflow
46
+
47
+ ```
48
+
49
+ class Cashflow < ApplicationRecord
50
+
51
+
52
+
53
+ def self.import(file)
54
+
55
+ CSV.foreach(file.path, headers: :first_row, encoding: Encoding::CP932 ) do |row|
56
+
57
+ cashflow = find_by(id: row["id"]) || new
58
+
59
+ cashflow.attributes = row.to_hash.slice(*updatable_attributes)
60
+
61
+ cashflow.save!
62
+
63
+ end
64
+
65
+ end
66
+
67
+
68
+
69
+ def self.updatable_attributes
70
+
71
+ ["id", "d1_id", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "d10",
72
+
73
+ "d11", "d12", "d13", "d14", "d15", "d16", "d17", "d18", "d19", "d20",
74
+
75
+ "d21", "d22", "d23", "d24", "d25", "d26", "d27", "d28", "d29", "d30",
76
+
77
+ "d31", "d32", "d33", "d34", "d35", "d36", "d37", "d38", "d39", "d40",
78
+
79
+ "d41", "d42", "d43", "d44", "d45", "d46", "d47", "d48", "d49", "d50",
80
+
81
+ "d51", "d52", "d53", "d54", "d55", "d56", "d57", "d58", "d59", "d60",
82
+
83
+ "d61", "d62", "d63", "d64", "d65", "d66", "d67", "d68", "d69", "d70",
84
+
85
+ "d71", "d72", "d73", "d74", "d75", "d76", "d77", "d78", "d79", "d80",
86
+
87
+ "d81", "d82", "d83", "d84", "d85", "d86", "d87", "d88", "d89", "d90",
88
+
89
+ "d91", "d92", "d93", "d94", "d95", "d96", "d97", "d98", "d99", "d100",
90
+
91
+ "d101", "d102", "d103", "d104", "d105", "d106", "d107", "d108", "d109", "d110",
92
+
93
+ "d111", "d112", "d113", "d114", "d115", "d116", "d117", "d118", "d119", "d120",
94
+
95
+ "d121", "d122", "d123", "d124", "d125", "d126", "d127", "d128", "d129", "d130",
96
+
97
+ "d131", "d132", "d133", "d134", "d135", "d136", "d137", "d138", "d139", "d140",
98
+
99
+ "d141", "d142", "d143", "d144", "d145", "d146", "d147", "d148", "d149", "d150",
100
+
101
+ "d151", "d152", "d153", "d154", "d155", "d156", "d157", "d158", "d159", "d160",
102
+
103
+ "d161", "d162", "d163", "d164", "d165", "d166", "d167", "d168", "d169", "d170",
104
+
105
+ "d171", "d172", "d173", "d174", "d175", "d176", "d177", "d178", "d179", "d180",
106
+
107
+ "d181", "d182", "d183", "d184", "d185", "d186", "d187", "d188", "d189", "d190",
108
+
109
+ "d191", "d192", "d193", "d194", "d195", "d196", "d197", "d198", "d199", "d200",
110
+
111
+ "d201", "d202", "d203", "d204", "d205", "d206", "d207", "d208", "d209", "d210",
112
+
113
+ "d211", "d212", "d213", "d214", "d215", "d216", "d217", "d218", "d219", "d220",
114
+
115
+ "d221", "d222", "d223", "d224", "d225", "d226", "d227", "d228", "d229", "d230",
116
+
117
+ "d231", "d232", "d233", "d234", "d235", "d236", "d237", "d238", "d239", "d240",
118
+
119
+ "d241", "d242", "d243", "d244", "d245", "d246", "d247", "d248", "d249", "d250",
120
+
121
+ "d251", "d252", "d253", "d254", "d255", "d256", "d257", "d258", "d259", "d260",
122
+
123
+ "d261", "d262", "d263", "d264", "d265", "d266", "d267", "d268", "d269", "d270",
124
+
125
+ "d271", "d272", "d273", "d274", "d275", "d276", "d277", "d278", "d279", "d280",
126
+
127
+ "d281", "d282", "d283", "d284", "d285", "d286"]
128
+
129
+ end
130
+
131
+ end
132
+
133
+ ```
134
+
135
+ Controller/Cashflows
136
+
137
+ ```
138
+
139
+ class CashflowsController < ApplicationController
140
+
141
+ before_action :require_user_logged_in
142
+
143
+ before_action :period_check
144
+
145
+
146
+
147
+ def index
148
+
149
+ @cashflows = Cashflow.all.order(id: :asc).page(params[:page]).per(50)
150
+
151
+ end
152
+
153
+
154
+
155
+ def import
156
+
157
+ Cashflow.import(params[:file])
158
+
159
+ redirect_to root_url
160
+
161
+ end
162
+
163
+ end
164
+
165
+ ```
166
+
167
+ view/Cashflow/index
168
+
169
+ ```
170
+
171
+ <h1>キャッシュフロー読み込み</h1>
172
+
173
+ <%= form_with url: import_cashflows_path, local: true do |form| %>
174
+
175
+ <%= form.file_field :file %>
176
+
177
+ <%= form.submit %>
178
+
179
+ <% end %>
180
+
181
+ ```