【Sinatra】でCRUD操作~Cretae~

SinatraでCRUD操作のCreateの解説をしていきます!

*DBの設定の解説はありません。

*参考
DELETE/PUTがサポートされていない
https://gist.github.com/victorwhy/45bb5637cd3e7e879ace
実装
https://github.com/shannonjen/sinatra_crud_tutorial/blob/master/app.rb

初めのコード

Userを作成しながらSinatraのCRUDついて学んでいきます。

app.rb

require 'rubygems'  
require 'bundler'  
require 'sinatra'  
require 'active_record'  
require 'sinatra/activerecord'  

Bundler.require  



ActiveRecord::Base.establish_connection(  
  adapter: 'sqlite3',  
  database: './db/development.sqlite3'  
)  

class User < ActiveRecord::Base  
end  

get '/' do  
    erb :index  
end  

DBの構成はこうなってます。

class CreateUsers < ActiveRecord::Migration[6.0]  
  def change  
    create_table :users do |t|   
      t.string :name  
      t.string :email  
      t.string :password_digest  
    end  
  end  
end  

Userテーブルにnameとemailとpassword_digestカラムが文字列で存在しています。

Createの実装

では、Createから!
SinatraではRailsのように、erbファイルからform_forでCRUD操作をしないようです。(自分がそういうコードを見かけなかっただけかもしれません)

じゃあどうやって保存するレコードを判別するの?という話になりますが、コントローラ側とview側で保存したいレコードのすり合わせを行います。

app.rbにこのように追記してください。

app.rb

post '/create' do  
    User.create({:name => params[:name],:email => params[:email],:password_digest => params[:password_digest]})  
    puts params  
    redirect '/all'  
end  

最初の行はUserテーブルに、name ,email,password_digest を作成するという意味です。
puts params はコンソールに保存内容を表示させることが出来ます。
redirect '/all' で、レコードの保存後に、後程作成するall.erbに飛ぶことが出来ます。

一覧画面の作成

app.rbに以下のコードを追記してください。

get '/all' do  
    @users = User.all  
    erb :all  
end  

@users = User.all で、作成したUserテーブルの内容をall.erb画面へ持っていくことができます。この辺はRailsと同じですね!

viewsフォルダ配下にall.erb ファイルを作成します。

views/all.erb

<ul>  
<% @users.each do |user| %>  
    <li><%= user.id %></li>  
    <li><%= user.name %></li>  
    <li><%= user.email %></li>  
<% end %>  
</ul>  

*最低限のコードなので見にくいかもしれません。。。

erbファイルもRailsと同じような書き方でいけました!(Userのidとnameとemailのみ表示させています。)

ユーザ作成画面の実装

作成画面がRaislと少し違う書き方をします。

app.rbに以下のコードを記述します。

app.rb

get '/new' do  
    erb :new  
end  

そしてviewsフォルダ配下にnew.erbファイルを作成しましょう!

new.erb

<form method="post" action="/create">  
<li>  
名前  
<input type= "text" name="name">  
<li>  
メールアドレス  
<input type= "text" name="email">  
<li>  
パスワード  
<input type= "text" name="password_digest">  
<li>  
<input type= "submit" value="作成">  
</form>  

<form method="post" action="/create">app.rb で設定した内容を呼び出しています。

<input type= "text" name="name"> では、name="name" のように、name="~~~"にテーブルで設定したカラム名を設定します。

<input type= "submit" value="作成"> で、設定した内容を保存することができます。

</form> で閉めて終わりです。

これでCreateの処理ができました!

まとめ

Railsより軽く実装出来て素晴らしいですね!