【sinatra】ドットインストールsinatra入門の学習メモpart2

ドットインストールsinatra入門の学習メモpart1 - On_The_Backs_Of_The_Flyer の続きです。

目次

SQL

Sqlite3

いきなりだけど、テストデータを作成する。
create tableなどテーブル作るSQL書いたら
ルートディレクトリ上でコマンドを打つ

$ sqlite3 bbs.db < seeds.sql

みたくすれば、bbsというDBを作成し、その中にSQLを投入できる

DBアクセス(ORマッパー)

ActiveRecord

Active Record - Wikipedia

Active Recordはデータベースからデータを読み出すためのアプローチである。

要はActive Record使ってDB情報を渡してあげるとデータの受け渡しはよろしくやってくれる。

使い方

コントローラに

require 'active_record'

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

class Comment < ActiveRecord::Base
    
end

みたく'active_record'をrequireして、
ActiveRecord::Base.establish_connection内に接続情報を記載。
adapterを設定してdatabaseで接続するDB指定。

あとは 、レコードを引っ張ってきたいところで

    @comments= Comment.all

とすればCommentテーブルのレコードを引っ張ってこれる
view側で変数(@comments)を使用できる。

post

次にpostしたい場合。 まずview側で<form action="/create" method="post">のようにフォームを設定してその中にactionとmethod設定する
同じくview側で<input type="text" name="body">みたくする事でnameの中のパラメータをcontrollerに渡すことができる。
controller側で

post '/create' do
    Comment.create(body: params[:body])
    redirect to('/')
end

って感じで設定してあげると、viewでsubmitをした際にコントローラのこのメソッドにアクセスできる。
あとはparamsにviewから渡ってきたパラメータを使うことができる。

script実行できないようにする

画面で入力欄がJSコードだった場合にsubmitした際に、そのJSが実行できないようにするためには
viewに<%= Rack::Utils.escape_html(comment.body)%>
を設定してあげる

validate

validateはrailsと同じくモデルで設定する

class Comment < ActiveRecord::Base
  validates :body, presence: true
end

的な感じで

helper

sinatraにはhelper関数があって、簡単にいうと置換できる。

コントローラ側で

helpers do
    def h(str)
        Rack::Utils.escape_html(str)
    end
end

とすることで、Rack::Utils.escape_html(str)がh(str)になりこれがview側で使用できる
またstrが引数になる。