Ruby on Railsでアプリを作成してみた【掲示板アプリ】

## 1.プロジェクトを作成する

```
rails new <プロジェクト名>
rails server
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/bd12a9b7-f49d-6688-693b-e9fd88d0b773.png)


## 2.ルーティングを作成する

```config/routes.rb
Rails.application.routes.draw do

  # localhost:3000/posts

  resources :posts,only: [:index, :new, :create, :edit, :update, :destroy]
end
```
## ３.コントローラを作成する

```
rails generate controller <プロジェクト名>
```
```controllers/posts_controller.rb
class PostsController < ApplicationController
    def index
    end
end
```
## 4.ビューを作成する

① viewsのpostsファイルの中に、index.html.erbを作成する。

```views/posts/index.html.erb
<h1>Hello Ruby</h1>

<div class="button-container">
<%= link_to "新しい投稿", new_post_path, class:"link-button" %>
</div>

<ul>
<% @posts.each do |post|%>
<li>
<h2><%= post.title %></h2>
<p><%= post.content %></p>
<span><%= post.created_at %></span>
<div class="edit-delete-wrapper">
<%= link_to "編集", edit_post_path(post), class:"link-button" %>
<%= button_to "削除", post_path(post), method: :delete, class:"link-delete-button" %>
</div>
</li>
<% end %>
</ul>
```

② viewsのpostsファイルの中に、new.html.erbを作成する。

```views/posts/new.html.erb
<h1>新しい投稿</h1>

<%= form_with model: @posts,html:{class: "form-container"} do |form| %>
<div class="form-input">
<%= form.label :title %>
<%= form.text_field :title %>
</div>
<div class="form-input">
<%= form.label :content %>
<%= form.text_area :content %>
</div>
<div class="button-container">
<%= form.submit "投稿", class:"link-button"%>
</div>
<% end %>
```
③ viewsのpostsファイルの中に、edit.html.erbを作成する。

```views/posts/edit.html.erb

<h1>投稿編集</h1>

<%= form_with model: @post,html:{class: "form-container"} do |form| %>
<div class="form-input">
<%= form.label :title %>
<%= form.text_field :title %>
</div>
<div class="form-input">
<%= form.label :content %>
<%= form.text_area :content %>
</div>
<div class="button-container">
<%= form.submit "更新", class:"link-button"%>
</div>
<% end %>
```


## 5.モデルを作成する
```
rails generate model Posts title:string content:text
rails db:migrate
```
## 6.コントローラを編集する

```controllers/posts_controller.rb
class PostsController < ApplicationController
    before_action :set_post, only:[:edit, :update, :destroy]
    
    # 投稿された内容を全て取得する
    def index
        # データベースから投稿を全て取得する
        @posts = Post.all
    end

    # 新しい投稿のコントローラ設定
    def new
        # データベースから投稿を全て取得する
        @post = Post.new
    end

    def create
        @post = Post.new(post_params)

        if @post.save
            redirect_to posts_path
        else
            render :new
        end
    end

    def edit
        # @post = Post.find(params:[:id])
    end

    def update
        # @post = Post.find(params:[:id])
        if @post.update(post_params)
            redirect_to posts_path
        else
            render :edit
        end    
    end

    def destroy
        # @post = Post.find(params:[:id])
        @post.destroy
        redirect_to posts_path
    end

    private
    def post_params
        params.require(:post).permit(:title,:content)
    end

    def set_post
        @post = Post.find(params:[:id])
    end
end

```
## 7.CSSを作成する

```app/assets/stylesheets/application.css
body {
  font-family: Arial, sans-serif;
  margin: 0;
  padding: 0;
  background-color: #f8f9fa;
}

small {
  color: gray;
}

h1 {
  color: #343a40;
  text-align: center;
  padding: 20px 0;
}

ul {
  list-style: none;
  padding: 0;
  margin: 0 30%;
  margin-top: 30px;
}

ul li {
  background-color: #fff;
  border: 1px solid #ced4da;
  margin-bottom: 10px;
  padding: 20px;
}

ul li h2 {
  margin: 0 0 10px 0;
  color: #495057;
}

ul li p {
  color: #212529;
  margin: 0;
}

.button-container {
  text-align: center;
}

.form-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  background-color: #fff;
  padding: 30px;
  border-radius: 10px;
  box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);
  max-width: 500px;
  margin: auto;
  margin-top: 50px;
}

.form-input {
  margin-bottom: 20px;
  width: 100%;
}

.form-input input,
.form-input textarea {
  width: 100%;
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 5px;
}

.link-button {
  display: inline-block;
  background-color: #007bff;
  color: #fff;
  padding: 10px 20px;
  text-decoration: none;
  border-radius: 5px;
  text-align: center;
  cursor: pointer;
}

.link-delete-button {
  display: inline-block;
  background-color: #cc361f;
  font-size: 17px;
  color: #fff;
  padding: 10px 20px;
  text-decoration: none;
  border-radius: 5px;
  text-align: center;
  margin-left: 10px;
  border: 1px solid;
  cursor: pointer;
}

.edit-delete-wrapper {
  display: flex;
  margin-top: 10px;
}
```

## 参考サイト
[【Ruby on Rails入門】初心者OK！掲示板アプリを作りながら学ぶRuby on Rails入門](https://www.youtube.com/watch?v=CfdRXSrwLDo)
[【初心者向け】RubyonRailsで学ぶMVC入門](https://morderblog.com/rails-mvc/)
[Railsの一連の流れをMVC,ルーティングの観点からまとめてみた](https://qiita.com/s_tatsuki/items/66ffee4519451812a448)