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

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

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

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

Q&A

解決済

2回答

687閲覧

【Ruby(RubyOnRails)】テキスト出力について(行間が詰まる)

kabuki777

総合スコア8

Ruby

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

0グッド

0クリップ

投稿2021/12/25 06:14

編集2021/12/25 23:11

PHP歴17年7ヶ月
Ruby歴1ヶ月

たまたま舞い込んで来た初となるRuby(RubyOnRails)案件です。
複数行テキストの出力で狙った通りの表示が出来ず困っています。

●テキスト例
text = "テスト\n\nテスト"

上記テキスト値があったとします。
(現実的にはフォームの<textarea>から入力した複数行テキストをDBに保存したものを取り出した値)

●やりたいこと
上記テキスト例をただ単純に改行を反映させて、

テスト

テスト

・・・というように改行文字を2つ挟んでますので行間を空けて出力したいのですがこれが出来ません。

●PHPの場合
安全に出力するための措置を行った上で「nl2br()」という関数を使用するのが一般的ではないかと思います。(この関数はPHPを初めてから結構早めに覚えるものです)

●Ruby(RubyOnRails)の場合
調べた感じですと、まず改行を反映させるには「simple_format」を使用することになるようですが、
確かに改行が反映されますが狙ったとおりにはなりません。

(出力されるHTML)・・・FWでありがちですが、自動的に<p>タグが挿入されるがもう一つの改行が無視される

<p>テスト</p> <p>テスト</p>

(表示される状況)・・・行間が詰まってしまう
テスト
テスト

※テラテイルでの表示で当方の意図しない形でレイアウトが崩れていたらすみません。

●試したこと
https://improve-future.com/rails-realize-nl2br.html
ネット上の情報を検索して上記のような記事(2015年情報)がでてきましたが、検索してこういった記事が出てくるということは簡単にはいかないんでしょうかね。

要は、
・改行文字を<br>に置き換える
・このままだと<br>タグが実体参照に変換される(<br>)ためタグをそのままブラウザーで表示
・このため「html_safe」を使用
・これではさすがにマズいのでさらにsinitizeを使用
ということですが、これしか方法がないのでしょうか?

    def nl2br(str)
return sanitize(str).gsub("\n", '<br>').html_safe
end

※ユーザがフォームからの入力した内容って当然わかりやすいように行間を入れたり普通にするのですが、ちょっと調べた感じですと、こんな単純な事が難しいんでしょうかね?

やはりRubyの情報量って圧倒的に少ないです。
しかも、出てきても内容が怪しい(素人の仕業)か10年以上前の情報とかザラに出てきます。
Rubyの開発者さんってこんな状況でどんなふうに開発されてるんでしょうか。

こんな単純なことなのですがどうしていいか本気で困ってます。

ちなみに上記のRuby版nl2brでは例えば<h1>タグなどはHTMLとして解釈されますのでここから更にCSS等も含めて何かしら処置が必要です。

下記の記事もチェックしましたがちょっとイメージが違いました
https://marketing-web.hatenablog.com/entry/simple_format_without_p

※当方の調査不足、認識違いがあったら恐れ入ります・

よろしくお願いします

■20211226追記
回答得られず・・(外野からヤジが1件)
やっぱRubyって終わってるんですかね(笑)

閲覧だけ頂いた方含め、ご覧いただきありがとうございました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

PHPのことはしらないのですが、
「安全に出力するための措置」を行った上で「「nl2br()」という関数」を使用する
というのが
「sanitize(str)」を行った上で「.gsub("\n", '<br>').html_safe」を使用する
のでは無いでしょうか。
nl2br位用意してくれよ、という気持ちもわからんではないですが、この程度でしたらすぐ書けますし。
とわいえ、
rails3時代は DataTable、Ransacもどきを自作せざるをえませんでしたが、より洗練されたものがGemで提供されるなど、Rails,Rubyの世界はどんどん便利になって来ていますので、そのうちnl2br相当もStringのrails拡張に入ってくるかも です

投稿2021/12/26 10:39

winterboum

総合スコア23416

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

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

kabuki777

2021/12/26 11:06

初のご回答頂きました、ありがとうございます。 実際のところ、「テスト\n\nテスト」で、 テスト テスト ・・・というふうに改行文字2つありますので、行間を空けたい場合、具体的にどのようにしたら良いのでしょうか? 本気で知りたいです。 ちなみに現在は質問内容にあるRuby版「nl2br」を使用して、あとはCSS等含めて見た目の対応をするしか無いと考えておりました。 シンプルにDBに記録されている通りに行間を再現する方法をご教示頂けましたら誠に幸いです。 宜しくお願い致します。
winterboum

2021/12/26 13:48

planeなtextで表示するときはそれしか無いのでは。 test_area を 表示onlyにして使うという手もありますが
kabuki777

2021/12/26 19:11

コメントありがとうございました 承知いたしました
guest

0

そのPHPでできるという出力をしておいて、どういう出力データになってるのかを調べてみては。
そいつと同じ出力をすればいいという話では

投稿2021/12/25 06:47

y_waiwai

総合スコア87800

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問