みてるぞ 2 months ago
parent
commit
59678cf8b9
7 changed files with 75 additions and 4 deletions
  1. BIN
      backend/app/models/41454326.32113544.jpg
  2. +8
    -0
      backend/app/models/post.rb
  3. +2
    -0
      backend/config/environments/production.rb
  4. +57
    -0
      backend/db/migrate/20250520152153_create_active_storage_tables.active_storage.rb
  5. +5
    -0
      backend/db/migrate/20250520152740_remove_thumbnail_from_posts.rb
  6. +1
    -1
      frontend/index.html
  7. +2
    -3
      frontend/src/pages/HomePage.tsx

BIN
backend/app/models/41454326.32113544.jpg View File

Before After
Width: 180  |  Height: 101  |  Size: 15 KiB

+ 8
- 0
backend/app/models/post.rb View File

@@ -4,4 +4,12 @@ class Post < ApplicationRecord
has_many :post_tags, dependent: :destroy has_many :post_tags, dependent: :destroy
has_many :tags, through: :post_tags has_many :tags, through: :post_tags
has_many :user_post_views, dependent: :destroy has_many :user_post_views, dependent: :destroy
has_one_attached :thumbnail

def as_json options = { }
super(options).merge({ thumbnail: thumbnail.attached? ?
Rails.application.routes.url_helpers.rails_blob_url(
thumbnail, only_path: false) :
nil })
end
end end

+ 2
- 0
backend/config/environments/production.rb View File

@@ -85,3 +85,5 @@ Rails.application.configure do
# Skip DNS rebinding protection for the default health check endpoint. # Skip DNS rebinding protection for the default health check endpoint.
# config.host_authorization = { exclude: ->(request) { request.path == "/up" } } # config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
end end

Rails.application.routes.default_url_options[:host] = 'hub.nizika.monster/api'

+ 57
- 0
backend/db/migrate/20250520152153_create_active_storage_tables.active_storage.rb View File

@@ -0,0 +1,57 @@
# This migration comes from active_storage (originally 20170806125915)
class CreateActiveStorageTables < ActiveRecord::Migration[7.0]
def change
# Use Active Record's configured type for primary and foreign keys
primary_key_type, foreign_key_type = primary_and_foreign_key_types

create_table :active_storage_blobs, id: primary_key_type do |t|
t.string :key, null: false
t.string :filename, null: false
t.string :content_type
t.text :metadata
t.string :service_name, null: false
t.bigint :byte_size, null: false
t.string :checksum

if connection.supports_datetime_with_precision?
t.datetime :created_at, precision: 6, null: false
else
t.datetime :created_at, null: false
end

t.index [ :key ], unique: true
end

create_table :active_storage_attachments, id: primary_key_type do |t|
t.string :name, null: false
t.references :record, null: false, polymorphic: true, index: false, type: foreign_key_type
t.references :blob, null: false, type: foreign_key_type

if connection.supports_datetime_with_precision?
t.datetime :created_at, precision: 6, null: false
else
t.datetime :created_at, null: false
end

t.index [ :record_type, :record_id, :name, :blob_id ], name: :index_active_storage_attachments_uniqueness, unique: true
t.foreign_key :active_storage_blobs, column: :blob_id
end

create_table :active_storage_variant_records, id: primary_key_type do |t|
t.belongs_to :blob, null: false, index: false, type: foreign_key_type
t.string :variation_digest, null: false

t.index [ :blob_id, :variation_digest ], name: :index_active_storage_variant_records_uniqueness, unique: true
t.foreign_key :active_storage_blobs, column: :blob_id
end
end

private
def primary_and_foreign_key_types
config = Rails.configuration.generators
setting = config.options[config.orm][:primary_key_type]
primary_key_type = setting || :primary_key
foreign_key_type = setting || :bigint
[ primary_key_type, foreign_key_type ]
end
end

+ 5
- 0
backend/db/migrate/20250520152740_remove_thumbnail_from_posts.rb View File

@@ -0,0 +1,5 @@
class RemoveThumbnailFromPosts < ActiveRecord::Migration[8.0]
def change
remove_column :posts, :thumbnail, :string
end
end

+ 1
- 1
frontend/index.html View File

@@ -1,5 +1,5 @@
<!doctype html> <!doctype html>
<html lang="en">
<html lang="ja">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" />


+ 2
- 3
frontend/src/pages/HomePage.tsx View File

@@ -21,15 +21,14 @@ const HomePage = () => {


return ( return (
<div className="flex flex-wrap gap-4 p-4"> <div className="flex flex-wrap gap-4 p-4">
{posts.map((post) => (
{posts.map (post => (
<Link <Link
to={`/posts/${post.id}`} to={`/posts/${post.id}`}
key={post.id} key={post.id}
className="w-40 h-40 overflow-hidden rounded-lg shadow-md hover:shadow-lg" className="w-40 h-40 overflow-hidden rounded-lg shadow-md hover:shadow-lg"
> >
<img <img
src={post.image_url}
alt={post.title}
src={post.thumbnail}
className="object-cover w-full h-full" className="object-cover w-full h-full"
/> />
</Link> </Link>


Loading…
Cancel
Save