0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

投稿機能をつける

Last updated at Posted at 2022-06-02

ユーザーの方が行き詰まったので投稿機能を作成することにした。
そのためにMySQLでテーブルを作成する。
その後にモデルのファイルを作成、そこでバリデーションをかける。
その後実装する機能としては
・投稿機能
・投稿詳細ページ
・投稿一覧機能
・投稿編集
・投稿削除

postsテーブルを作成

投稿の文章のデータ型を何にしようか?
調べてみると
CHAR,VARCHAR,TEXTとある。
どれを使えばいいのだろう?

CHAR(固定長文字列)

何があっても宣言された文字分の領域を使う。
列に入れる文字列の長さが細田長に満たないばああい、文字列が最大長になるまで空きを半角スペースで埋めます。

出典 SQLゼロから始めるデータベース操作第二版 p35

VARCHAR(可変長文字型)

カラムに宣言されたサイズを上限として値の文字数ぶんだけの領域を使用する。
最大長に満たさなくても、半角スペースで埋めなくてもいい。
出典 SQLゼロから始めるデータベース操作第二版 p35

大体長くなければvarchar(255)で足りる。

TEXT型

65,535バイトを超える長い文字列を扱う。
出典 MySQL徹底入門第4版 p97

そもそもデータの長さとは?

バイトとは基本的な単位である。
1文字=1バイト
このバイトを1024倍した単位がキロバイト
つまり
ギガバイトの場合は
1024x1024x1024の値だ。
その値分の文字を記憶できる。

出典 SQLゼロから始めるデータベース操作第二版 p188

モデルのファイルを作成

class Post < ApplicationRecord
  validates :content, {presence: true, length: { maximum: 140 }}
end

投稿機能ページを作成

ルーティングを設定

routes.rb
get '/posts/:id',         to: 'posts#new'

コントローラーを作成

posts_controller.rb
def new
end

ビューを作成

new.html.erbを作成。表示成功

投稿機能を作成

ルーティングを設定

routes.rb
post '/posts/create',    to: 'posts#create'

コントローラーを作成

posts_controller.rb
.
.
.
def create
    @post = Post.new(content: params[:content])
    if @post.save
      flash[:notice] = "投稿に成功しました。"
      redirect_to "/posts"
    else
      @error_message = "投稿に失敗しました。"
      render "posts/new"
    end
  end
.
.
.

Routing Error

No route matches [GET] "/posts/create"
少し悩んだ。

redirect_to "/posts/create"

にしていたからだ。
GETで設定していないのに書いたからこうなった。
直したのが上のコード

ビューを作成

    <%= form_tag('/posts/create', method: :post) do %>
      <p>投稿内容</p>
      <textarea name="content"></textarea>
      <input type="submit" value=保存>
    <% end %>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?