ドットインストール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はデータベースからデータを読み出すためのアプローチである。
要は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が引数になる。