読者です 読者をやめる 読者になる 読者になる

落書きノート

ふと自分が気になった事を書いてます

Rails Scaffold無しのブログ作成途中経過

ここまで出来ました。Railsと仲良くなれたかも?

posts_controller.rb

class PostsController < ApplicationController
  before_action :set_post, only: :show

  def index
    @posts = Post.all
  end

  def show
  end

  def new
    @post = Post.new
  end

  def create
    @post = Post.new(post_params)

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: '投稿しました。' }
      else
        format.html { flash.now[:notice] = '投稿に失敗しました。'}
        format.html { render :new }
      end
    end
  end

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

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

index.html.erb,new.html.erb,_form.html.erb,show.html.erb

# index.html.erb
<h1>投稿インデックス</h1>
<table>
  <thead>
    <tr>
      <th>タイトル</th>
      <th>本文</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= post.title %></td>
        <td><%= post.body.truncate(10) %></td>
        <td><%= link_to '表示', post %></td>
      </tr>
    <% end %>
  </tbody>
</table>

# new.html.erb
<%= link_to '新しく投稿する', new_post_path %>

<p id="notice"><%= notice %></p>

<h1>投稿画面</h1>

<%= render 'form', post: @post %>

<%= link_to '戻る', posts_path %>

# _form.html.erb
<%= form_for(post) do |f| %>
  <% if post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% post.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>

  <div class="field">
    <%= f.label :body %>
    <%= f.text_area :body %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

# show.html.erb
<p id="notice"><%= notice %></p>

<p>
  <strong>Title:</strong>
  <%= @post.title %>
</p>

<p>
  <strong>Body:</strong>
  <%= @post.body %>
</p>

<%= link_to '編集', edit_post_path(@post) %> |
<%= link_to '戻る', posts_path %>

posts.scss

// Place all the styles related to the posts controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

body {
  background-color: #fff;
  color: #333;
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 13px;
  line-height: 18px;
  margin: 33px;
}

p, ol, ul, td {
  font-family: verdana, arial, helvetica, sans-serif;
  font-size: 13px;
  line-height: 18px;
  margin: 33px;
}

pre {
  background-color: #eee;
  padding: 10px;
  font-size: 11px;
}

a {
  color: #000;

  &:visited {
    color: #666;
  }

  &:hover {
    color: #fff;
    background-color: #000;
  }
}

th {
  padding-bottom: 5px;
}

td {
  padding-bottom: 7px;
  padding-left: 5px;
  padding-right: 5px;
}

div {
  &.field, &.actions {
    margin-bottom: 10px;
  }
}

#notice {
  color: green;
}

.field_with_errors {
  padding: 2px;
  background-color: red;
  display: table;
}

#error_explanation {
  width: 450px;
  border: 2px solid red;
  padding: 7px;
  padding-bottom: 0;
  margin-bottom: 20px;
  background-color: #f0f0f0;

  h2 {
    text-align: left;
    font-weight: bold;
    padding: 5px 5px 5px 15px;
    font-size: 12px;
    margin: -7px;
    margin-bottom: 0;
    background-color: #c00;
    color: #fff;
  }

  ul li {
    font-size: 12px;
    list-style: square;
  }
}

label {
  display: block;
}

routes.rb

Rails.application.routes.draw do
  resources :posts
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

以下は実行したコマンドです。覚え書きなので少し適当です。

# rails new blog
# rails g model Post title:string body:text
# rails g controller posts
# rake db:migrate
# rails s
!ルーティングの確認
# rake routes
!いざというときに使う
# rails console
# rails dbconsole

尚、データベースはSQLiteを使っています。MariaDBとかと比べて、少し文法が変わってますが、select文自体は同じように使えます。create database文は試してないので使える型とかは確認していません。多分共通だと思います。