scaffoldで超簡単にweb開発する方法(1)

scaffoldで爆速web開発

railsでscaffoldをつかうと手軽にweb開発できます。

慣れると非常に便利です。ルーティングもビューもモデルもマイグレーションファイルも全部作ってくれます。

Railアプリケーションを作成

mkdir 作業フォルダ

cd 作業フォルダ

rails new アプリ名

cd アプリ名

これでアプリができました。

usersテーブル作成

まずはusersテーブルを作っていきましょう。

bundle exec rails g scaffold users

これをすると必要なものをバラバラっと用意してくれます。

db/migrate/xxxxxxxxxxx_create_users.rb ができるので、これに

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.string :name
      t.integer :agreement_id

      t.timestamps
    end
  end
end

nameカラムとagreementカラムを作ってやるように書きます。それで

bundle exec rake db:migrate

をしてデータベースに反映させます。

agreementsテーブルを作成

もう一つテーブルを作ってやりましょう。agreementsテーブルです。

bundle exec rails g scaffold agreements

db/migrate/xxxxxxxxxxxx_create_agreements.rb ができるので、これに

class CreateAgreements < ActiveRecord::Migration[5.1]
  def change
    create_table :agreements do |t|
      t.string :name
      t.integer :user_id
      t.datetime :start_at
      t.datetime :expire_at

      t.timestamps
    end
  end
end

nameカラムとuser_idカラムとstart_atカラム(契約開始日)とexpire_atカラム(契約終了日)を足して、

bundle exec rake db:migrate

でデータベース上に反映。

ここまでできたら、一度アクセスしてみます。

bundle exec rails s

でサーバーを立てたあと、ブラウザでlocalhost:3000を開きます。すると、

これが表示されます。今回はクライアント(user)と契約(agreement)に関係性を持たせていくため、管理画面をつくっていきます。

管理画面作成

bundle exec rails g scaffold manages

マイグレーションファイルにはnameカラムだけ追加してデータベースに反映。

config/routes.rb内に

get ‘/’ => ‘manages#index’

を追記してサイドlocalhost:3000にアクセスすると、

こうなってます。

rails cをしたときはirbじゃなくてpryの方が良いです。なので、Gemfileのgroup :development, :test do内に

gem ‘pry-rails’
gem ‘pry-doc’
gem ‘pry-byebug’
gem ‘pry-stack_explorer’

を追記してbundle install

それでrails cをするとpryを立ち上げたところ、

Running via Spring preloader in process 21941

Loading development environment (Rails 5.1.6)

Frame number: 0/24

Cannot read termcap database;

using dumb terminal settings.

って言われます。だめなターミナルの設定を使ってるよって怒られてます。

~/.bashrcに

export DISABLE_SPRING=true

の一文を加えると怒られなくなりました。

views/manages/_form.html.erb内の <div class=”actions”>内をこんな風に変えます。

<div class=”actions”>
  <%= form_for @manage do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>
    <%= f.submit %>
  <% end %>
</div>

次にmanages_controller内の一番下、 def manage_params内にこんな風に付け足してください。

def manage_params
  params.fetch(:manage, {}).permit(:name)
end

これでさっきフォームに入力した値をnameカラムに入れることができるようになりました。

localhost:3000/manages/newにアクセスするとフォームができているのでそこに好きな名前を入力します。それでcreate manageボタンをクリック。

views/manages/index.html.erb内の

<% @manages.each do |manage| %>
<tr>

の下に

<td><%= manage.name %></td>

と追加してlocalhost:3000にアクセス。

すると

表示されました