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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

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

Ruby

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

Q&A

解決済

2回答

665閲覧

【Rails】xlsxファイルが保存されない

kazuki0714

総合スコア28

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2019/07/18 04:58

編集2019/07/19 17:40

問い合わせ機能を作成しています。
問い合わせした内容を一覧で表示させたいのですが、xlsxファイルが表示されません。

スクショ1枚目が登録画面、2枚目が一覧表示画面です。
2枚目の画面でファイル名で表示させたいのですがご教示いただけると幸いです。

ググったらFile.basename を使えばできるとのことで色々試したのですが結局表示されずじまいでして。。。
require csv を入れるとtmpフォルダに自動で保存されると書いてたのですが保存されていないので File.basename 以前の問題のような気がします。
こちらを参考にしました。(https://ruby-rails.hatenadiary.com/entry/20141120/1416483136)

イメージ説明

イメージ説明

Ruby

1<!-- app/views/mails/new.html.erb --> 2 3<%= form_tag("/mails/create",{multipart: true}) do %> 4 5<p>送信先</p> 6<input name="dest"> 7 8<p>タイトル</p> 9<input name="subject"> 10 11<p>問い合わせ内容</p> 12<input name="body"> 13 14<p>添付ファイル</p> 15<input name="attachments" type="file"> 16 17<p><input type="submit" value="送信"></p> 18 19<% end %> 20

Ruby

1# app/controllers/mails_controller.rb 2 3class MailsController < ApplicationController 4 5 def index 6 @mails = Mail.all 7 end 8 9 def new 10 end 11 12 def create 13 @mails = Mail.all 14 # gemをインストールしてxlsxデータを出力できるようにする https://qiita.com/necojackarc/items/0dbd672b2888c30c5a38 15 @mail = Mail.new(dest: params[:dest], subject: params[:subject], body: params[:body]) 16 @mail.save 17 18 if params[:attachments] 19 @mail.attachments = "#{@mail.id}.jpg" 20 image = params[:attachments] 21 File.binwrite("tmp/tests/#{@mail.id}.jpg", image.read) 22 end 23 end 24end 25

Ruby

1# config/application.rb 2# ここに require を追加 3require_relative 'boot' 4 5require File.expand_path('../boot', __FILE__) 6 7require 'rails/all' 8require 'csv' 9 10# Require the gems listed in Gemfile, including any gems 11# you've limited to :test, :development, or :production. 12Bundler.require(*Rails.groups) 13 14module ApiForm 15 class Application < Rails::Application 16 # Initialize configuration defaults for originally generated Rails version. 17 config.load_defaults 5.2 18 19 # Settings in config/environments/* take precedence over those specified here. 20 # Application configuration can go into files in config/initializers 21 # -- all .rb files in that directory are automatically loaded after loading 22 # the framework and any gems in your application. 23 end 24end 25

Ruby

1<!-- app/views/mails/index.html.erb --> 2 3<h1>送信内容一覧</h1> 4 <table border="1"> 5 <thead> 6 <tr> 7 <th>id</th> 8 <th>送信先</th> 9 <th>タイトル</th> 10 <th>内容</th> 11 <th>添付ファイル</th> 12 <th></th> 13 </tr> 14 </thead> 15<tbody> 16 <% @mails.each.with_index(1) do |mail, i| %> <!-- theadの上にあったのをここに移した--> 17 <tr> 18 <td><%= i %></td> 19 <td><%= mail.dest %></td> 20 <td><%= mail.subject %></td> 21 <td><%= mail.body %></td> 22 <td><%= mail.attachments %></td> 23 </tr> 24 <% end %> <!-- </table>の下にあったのをここに移した --> 25 </table>

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

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

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

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

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

kazuki0714

2019/07/19 00:34

追加しました。よろしくお願いいたします。
guest

回答2

0

rb

これでcsvが自動的に保存される? https://ruby-rails.hatenadiary.com/entry/20141120/1416483136

@mail = Mail.new(dest: params[:dest], subject: params[:subject], body: params[:body], attachments: params[:attachments])

されません。記事を読んでみると...

rb

1class Product < ActiveRecord::Base

def self.import(file)

CSV.foreach(file.path, headers: true) do |row| # IDが見つかれば、レコードを呼び出し、見つかれなければ、新しく作成 product = find_by(id: row["id"]) || new # CSVからデータを取得し、設定する product.attributes = row.to_hash.slice(*updatable_attributes) # 保存する product.save! end

end

更新を許可するカラムを定義

def self.updatable_attributes
["name", "price", "released_on"]
end
end

処理の部分はきちんと実装されています。

ちなみに

fileはtmpに自動で一時保存される

と、記事に書いてある通りこれは一時保存です。

投稿2019/07/19 07:19

編集2019/07/19 07:22
Mugheart

総合スコア2349

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

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

guest

0

ベストアンサー

mail.attachments.original_filename にしてみるとどうなります?

投稿2019/07/19 06:28

winterboum

総合スコア23347

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

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

kazuki0714

2019/07/19 06:49

`NoMethodError` が表示されます(^◇^;) controller側でなにか設定したほうがよろしいでしょうか?
winterboum

2019/07/19 07:14

fileがsaveされていないように思えます。 Mail モデルに添付file saveのための仕掛けはしてありますか? CarrierWave::Uploade を使っているとか
kazuki0714

2019/07/19 07:40

`mails_controller.rb` を変更しました。 これでtmpフォルダに保存されるのですが、やはり `index.html.erb` で `mail.attachments.original_filename` にするとNoMethodErrorが出ますね(^◇^;)
winterboum

2019/07/19 07:50

そりゃそうです。そのsaveの方法では。 @mail.attachments ="#{@mail.id}.jpg" としてますから、 mail.attachments に戻してください。 但しこれですと 元のファイル名ではなく 123.jpg とかになります。 元のファイル名を保存する場合は @mail.attachments =params[:attachments].original_filename
kazuki0714

2019/07/19 08:14

ありがとうございます!「mails_controller」を変更しました。 tmpフォルダには保存されているのですが、「index.html.erb」には依然として表示されない状態です。 他の部分が原因でしょうか?
winterboum

2019/07/19 08:16

<td><%= mail.attachments %></td> に戻しました?
kazuki0714

2019/07/19 09:03

はい、「index.html.erb」は <td><%= mail.attachments %></td> にしております。
winterboum

2019/07/19 09:06

何も表示されないのか、期待と異なるものが表示されるのか、どちら?
kazuki0714

2019/07/19 10:19

何も表示されない(空白)です。
winterboum

2019/07/19 11:28

すると、params[:attachments].original_filename が問題か。 #{@mail.id}.jpg にしたらでます?
kazuki0714

2019/07/19 17:41

コードを修正したのですがこれで合ってますでしょうか? これでも空白ですね(^◇^;) 違うファイルの問題でしょうか?
winterboum

2019/07/19 20:31

なんだ、 @mail.attachments = "#{@mail.id}.jpg" のあとsaveして下さい
kazuki0714

2019/07/22 01:51

あっできました! 初歩的なとこで躓いてしまいました(^◇^;) ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問