csvをアップロードしてデータベースに取り込みたいのですが、下記の通りコーディングするとコントローラーの部分でエラーになってしまいます。
どのようにすれば良いでしょうか?
エラー
NoMethodError in FormController#filecreate undefined method `import' for #<Class:0x007f9fa55995d8> Testnadatabase.import(params[:file])
csvimport.html.erb
<%= form_tag({controller: :form, action: :filecreate}, method: :post, multipart: true) do %> <p><%= file_field_tag :file %></p> <%= submit_tag 'インポート' %> <% end %>
form_controller.rb
def filecreate Testnadatabase.import(params[:file]) redirect_to action: :index end
/models/testnadatabase.rb
require 'csv' class Testnadatabase < ApplicationRecord def self.filecreate(file) CSV.foreach(file.path) do |row| Testnadatabase.create! row.to_hash end end end
###追記
ご回答ありがとうございます。
ご指摘の通り、filecreateにしたところ次の処理に進みました。
ですが、フィールドが空のままでレコードが生成されてしまうところで苦戦しています。
ヘッダーのないcsvなので、カラム名を指定していないことが原因かなと思っています。
model内でそれぞれのカラム名を指定すれば(ハッシュ化?)できそうと思うのですが、どのように書けばよいでしょうか?
また、 /models/testnadatabase.rb
の Testnadatabase.create! row.to_hash
にある「 row.to_hash
」はヘッダーがないため、ここでハッシュ化しても無意味だと思い、削除しました。
require 'csv' class Testnadatabase < ApplicationRecord def self.filecreate(file) CSV.foreach(file.path) do |row| Testnadatabase.create! end end end

回答2件
あなたの回答
tips
プレビュー