Rails 7: リッチ テキスト領域に画像をアップロードすると表示されない

概要

Ruby on Rails のホームページでこのビデオをフォローしています: https://rubyonrails.org/ 。これらは私のステップです

rails new demo
rails generate scaffold post title:string content:text
rails db:migrate
rails server
http://localhost:3000/
http://localhost:3000/posts
http://localhost:3000/posts/1
http://localhost:3000/posts/1/edit
http://localhost:3000/posts/new

ファイル D:\2024_04_29pp iewspplication.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>Demo</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <%= csrf_meta_tags %>
  <%= csp_meta_tag %>

  <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
  <link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
  <%= javascript_importmap_tags %>
</head>

<body>
<%= yield %>
</body>
</html>

http://localhost:3000/posts.json http://localhost:3000/posts/2.json

検証

ファイル D:\2024_04_29pp.rb

class Post < ApplicationRecord
    validates_presence_of :title
end
rails console
rails c
Post.first
Post.create! title:”From the console”, content: “Nice!”
Post.where(created_at: Time.now.all_day).to_sql

Post.where(created_at: Time.now.all_day)


irb(main):008> Post.where(created_at: Time.now.yesterday.all_day)

irb(main):008> Post.where(created_at: Time.now.yesterday.all_day).to_sql
rails action_text:install
bundle
rails db:migrate

ファイル D:\2024_04_29pp.rb

class Post < ApplicationRecord
    validates_presence_of :title
    has_rich_text :content
end

ファイル D:\2024_04_29pp iews_form.html.erb

<%= form_with(model: post) do |form| %>
  <% if post.errors.any? %>
    <div style="color: red">
      <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
        <% post.errors.each do |error| %>
          <li><%= error.full_message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div>
    <%= form.label :title, style: "display: block" %>
    <%= form.text_field :title %>
  </div>

  <div>
    <%= form.label :content, style: "display: block" %>
    <%= form.rich_text_area :content %>
  </div>

  <div>
    <%= form.submit %>
  </div>
<% end %>

データベースを調べてみました

ソースコード: https://github.com/donhuvy/rails7demo

私の画像が表示されなかったのはなぜですか?それを修正するにはどうすればよいですか?

解決策

問題は、列posts.contentをテキストデータ型として作成することです。

アクションテキストはモデルテーブルに列を必要としません。アクション テキストは、record_id 列と Record_type 列による多態性の関連付けを使用して他のモデルと関連付けられるある種のモデルです。

まず、コマンドを使用してアクションテキストのテーブル、スタイル、部分を作成する必要があります(存在しない場合)。

bin/rails action_text:install

私は Rails ジェネレーターは好きではありませんが、最初のコマンドは次のようにする必要があります。

bin/rails g scaffold post title:string content:rich_text

(単なるテキストではなくリッチテキスト)

このコマンドは新しい列を作成せず、モデルやビューなどに has_rich_text 表記を追加するだけです。

「posts.content」列を削除する必要があります

画像を変換する場合は、システム ライブラリ (デフォルトでは libvips) が必要になることにも注意してください。

続きを読む:

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://edgeguides.rubyonrails.org/action_text_overview.html