americandog1993の日記

プログラマー歴半年のメモ

Rails超初心者のいろいろ

Railsチュートリアル7〜8章くらいで完全についていけなくなってしまったので、中断した。
諦めてはいない。戦略的撤退。

特にActiveRecordの不理解が全体の俯瞰を妨げている感があったのでドットインストールActiveRecord入門をざっと視聴。
だいぶマシになった気がする。
ActiveRecordとは要はSQLを使わずにRuby文法でDBを操作することを可能にする便利ツール的なもののようだ。

Bootstrap入門も半分くらい視聴。
とりあえずこれは暗記したらいけるっぽい。
気に入らない部分をちょこちょこCSSで編集すればいい感じだろう。

進むことを優先しすぎた感がある。
一度振り返る必要がある。
特に基本的と思われる部分を自分なりにまとめてみる。

よく使うRailsコマンド

$ rails new 名前

超基本。アプリの骨格をザッと作る。

$ rails generate model 名前 table列名:データ型

modelはDBをごにょごにょする何か。
単数形でgenerateする。
列名は複数書いていける。
自動的に一意のid列も生成される。

$ rails generate controller 名前

controllerはviewをわちゃわちゃする何か。
複数形でgenerateする。
名前は複数書いていける。
modelもcontrollerも頭を大文字にしてgenerateする。

$ rake db:migrate

今これを書いててはたと手が止まった。マイグレーションについて何も理解していなかったことに気づいた。
何をしているのか。ググっても釈然としない。要はDBを作るコマンド・・・?
modelの段階で列名は書いてるし、そこでDBできてるんじゃないのか?と思っていたが、どうも違うっぽい。
ここは本当に自信がないのだけれども、ググって出てきたサイト(本記事末尾に掲載)をサーッと眺めた限りでは、generate modelの段階では、マイグレーションファイルというDBのレシピ的なものが作られるだけで、rake db:migrateすることによってレシピに基づいたDBの実態が生成されるようだ。
もし違ったらご指摘ください。

$ rails console

Rubyを書いて簡易テストができる。
実験場に入る的な感じ。

$ rake routes

link_toの後になんて書いたらいいんだっけというときに叩く。

よく触るファイル

controllers/concerns/xxxx_controller.rb

def xxxx
end

xxxxはビュー名と合わせる。

views/layouts/application.html.erb

ビューファイルの共通部を書く。
ここに書くと他にも反映される。
DRY精神の片鱗を見ることができるすごいやつ。

views/xxxx/xxxx.html.erb

共通部以外を記述していく。
generate controllerの際にコントローラと一緒に作ることもできる。

config/routes.rb

root 'コントローラ名(xxxx_controller.rbのxxxx部)#ビュー名(xxxx.html.erbのxxxx部)'
get 'コントローラ名#ビュー名'
resouces :モデル名

最低限この辺抑えとけばなんとかなりそう。なってくれ。

参考:
www.transnet.ne.jp
ドットインストール Rails入門
http://dotinstall.com/lessons/basic_rails_v2/24912

RailsにBootstrapを導入

Gemfileに以下を追加。
バージョンは任意で。

gem 'bootstrap-sass', '3.3.6'

bundle installする。

$ bundle install

app/stylesheetsにcustom.scssを追加。
内容は、

@import "bootstrap-sprockets";
@import "bootstrap";

としておく。
お試しのページを作ってみる。

$ rails g Static_pages home

app/views/static_pages/home.html.erbの内容を

<html>
    <head>
        <%= stylesheet_link_tag 'application', media: 'all',
                                       'data-turbolinks-track': 'reload' %>
    </head>
    <body>
        <button type="button" class="btn btn-primary">Primary</button>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>
</html>

とする。なんとなくボタンで確認。
ボタンがbootstrap特有の丸かわいい感じになってれば成功。

f:id:americandog1993:20170422213241p:plain

参考:
railstutorial.jp
webnetamemo.com

RubyonRails HerokuでHelloWorldするまで

前提:
RubyRails・git・herokuツールベルトをインストールしている。
(筆者はCloud9使用。Ubuntu。)
Herokuの会員登録を終えている。

まず適当なアプリを作る。
Cloud9ならすでにあるのでこの工程は要らない。

$ rails new myapp
$ cd myapp

Gemfileを下のように書き換える。
(Railsチュートリアルそのまま)

source 'https://rubygems.org'

gem 'rails',        '5.0.0.1'
gem 'puma',         '3.4.0'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.0.0'
gem 'coffee-rails', '4.2.1'
gem 'jquery-rails', '4.1.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.4.1'

group :development, :test do
  gem 'sqlite3', '1.3.11'
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.2'
  gem 'spring-watcher-listen', '2.0.0'
end

group :production do
  gem 'pg', '0.18.4'
end

bundle installする。

$ bundle install --without production

赤文字でエラーが出たら読んでみる。
'bundle update'がどうとか書いてたら

$ bundle update

を叩けばOK。
終わったら改めてbundle installする。

controllers/concerns/application_controller.rbを下のように書き換える。

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  def hello
    render html: "hello, world!"
  end
end

config/routes.rbを下のように書き換える。

Rails.application.routes.draw do
  root 'application#hello'
end

gitの初期設定。

$ git config --global user.name 名前
$ git config --global user.email メールアドレス

heroku設定。

$ heroku login
$ heroku keys:add

myapp直下でgit initする。

$ git init

ステージに上げてコミット。

$ git add -A
$ git commit -m "hello, world!"

heroku側でアプリ作成。
自動的にgitに紐づくようなのでそのままpush。

$ heroku create
$ git push heroku master

ターミナルに出てくるURLにアクセス。

f:id:americandog1993:20170422181418p:plain

参考:
railstutorial.jp

ORACLE 桁を揃えるLPAD

111

こいつを四桁にしたいとき。
足りない桁は頭に0を入れて保管する。
最初NUMBER型とする。

LPADの書き方は

LPAD('文字列', 桁数 , '補完文字')

桁数は数値型なので''(シングルクオーテーション)はつけない。
NUMBERの111をTO_CHARしてLPADする。

SELECT LPAD(TO_CHAR(111), 4, '0')
FROM DUAL

参考:
www.shift-the-oracle.com

ORACLE NUMBER型の日付を文字列yyyy/MM/dd表記で表示する

20110401

NUMBER型のこいつを書式を整えて表示する方法。

まず、TO_DATEしたいのだけど、TO_DATEの書き方は

TO_DATE('文字列', '書式')

なので、NUMBER型の20170401をまずTO_CHARする。

TO_CHAR(20170401)

それからTO_DATEをかける。

TO_DATE(TO_CHAR(20110401), 'yyyyMMdd')

TO_CHARの日付書式変換の書き方は

TO_CHAR('文字列', '書式')

で、こうなる。

TO_CHAR(TO_DATE(TO_CHAR(20110401), 'yyyyMMdd'), 'yyyy/MM/dd')

テキトーにテスト表示したければ、

SELECT TO_CHAR(TO_DATE(TO_CHAR(20170401), 'yyyyMMdd'), yyyy/MM/dd)
FROM DUAL

参考:
www.shift-the-oracle.com

A server is already running と出て rails server できないとき

$ rails s
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:8080
=> Run `rails server -h` for more startup options
A server is already running. Check /home/ubuntu/workspace/sample_app/tmp/pids/server.pid.
Exiting

こんなん出た。
よく読むとなんか書いてる。

A server is already running. Check /home/ubuntu/workspace/sample_app/tmp/pids/server.pid.

言われた通り server.pid をチェックする。
というか消す。

pids まで行って、

$ sudo rm server.pid

これで rails s したら無事動いた。

参考:
hagetak.hatenablog.com