質問編集履歴
1
CSVインポートのコードを追加しました。
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
|
+
```
|