ubuntu14.04 ruby rails アップデート

1
rails g devise:views

で生成しようとしたけど
uby のバージョンが古いためエラー

ubuntu ruby アップデート
で検索し
UbuntuにRubyをインストールした話
を参考に

1
2
cd ~/.rbenv/
git pull

で rbenv をアップデート

しかし、これだけで行うと

1
rbenv install -l

で表示されるのは
2.3.1 まで

これ以降をインストールしたいのなら
ruby-build のアップデートが必要なので

1
2
cd ~/.rbenv/plugins/ruby-build/
git pull

で更新

これで 2.5 までインストールが可能に

1
rbenv install 2.5.0

でインストールして
通常使う ruby を 2.5.0 にするため

1
rbenv global 2.5.0

あとは RubyGems をアップデートするので

1
gem update --system

これでできると思ったら
The `rails’ command exists in these Ruby versions:
2.3.0
となってしまう

このため、このメッセージで検索し
Ruby 2.3.0 → 2.4.1 にした時に Rails が動かなくなった.

を参考に

1
gem install rails

として
rails 再インストール

rails コンソールでのデータ取得方法

rails コンソールでのデータ取得方法

.all だとすべてのデータの取得ができる

特定の id のデータを取得したいのなら
find() を使う

もし id:1 のレコードを取得するのなら
find(1)
というようになる

Messageの中から取得するのなら

1
Message.find(1)

というかんじ

もちろん、この検索結果を変数に格納することもできる

1
hoge_msg = Message.find(1)

とすると hoge_msg に結果が格納される

次に find_by()
find と似てるけど、こっちは
カラム名と値のペアで検索できる
これは、名前とかで検索するときに使える

ちなみに、取得できるのは1件だけなので注意

1
hoge_msg = Message.find_by(name:"hoge")

とすると
nameが hoge のものを hoge_msg に格納する

応用で body の中身が test のものを検索して格納なら

1
test_msg = Message.find_by(body:"test")

というようになる

もし1件ではなく、該当するものすべてにしたいのなら
where を使う
body が hello のものをすべて調べるのなら

1
Message.where(body:"hello")

とすればいい

rails のDBをコンソールで操作

rails のDBをコンソールで操作

1
rails c

とすると
rails コンソールになり
データ作成、保存、削除などをコマンドで行うことができる

なお、タイプしているときに
tab を押すと補完機能で候補がでる

もし、メッセージをいれるのなら
まずは変数に代入

1
msg = Message.new(name:"hoge",body:"test text")

として
次に

1
msg.save

とすると保存される

入力するときに
id が nil でも自動で振り分けなら問題ないし
作成時刻の created_at や
更新時刻の updated_at も自動で入るので
nil でも問題ない

あと、
.save を実行したときに

1
=> true

がでるけど、これはデータ保存できたことを示す
もし、 false なら保存できていないということ

保存したデータをすべて取得するのなら
.all をつかう

もし、Message に保存したものをみるのなら
Message.all
とすればOK

このときに id が自動で連番で保存した順番についているのがわかる

なお、rails c で
rails コンソールになっている状態から抜けるには

1
quit

とすれば抜けることが可能

rails のマイグレーション

rails のマイグレーション

マイグレーションは
DBのテーブルの作成や修正に使う機能のこと

このマイグレーションにより
SQLを書かずに
ruby でファイルにDBの変更内容を記述することにより
DBのスキーマを作成したり更新したりできる

スッk−まは
どのテーブルに
どの形式のカラムが含まれているかという情報のこと

マイグレーションファイルは
rails g model などのコマンドを実行すると
db/migrateフォルダに作成される

これができた状態で

1
rake db:migrate

を実行すると
db/schema.rb に
DBのスキーマが記録される

この
db/schema.rb は
マイグレーションにより自動で更新されるので
手動でいじらないこと
これと似たようなものが Android アプリ作成のときにも
あったような…..

ちなみに、実際のDBテーブルは

1
rake db:migrate

を実行したときに作成される

なので、

1
rake db:migrate

のあとにマイグレーションファイルを編集しても
内容は反映されないので注意

マイグレーションファイルは、設定のためのファイルのようなもの
sql ファイルをいじっても実行しないとDBが更新されないようなかんじ

実行すると

1
2
3
4
== 20161103144900 CreateMessages: migrating ===================================
-- create_table(:messages)
   -> 0.0011s
== 20161103144900 CreateMessages: migrated (0.0012s) ==========================

というように
テーブルが作成されたのがわかる

これで作成されたDBのテーブルは
db/schema.rb で確認できる

つまり、どんなテーブルを作成するのかなどの
model 関連を調べるには
schema.rb をみて予測することができる

ちなみに、rails のDBはデフォだとsqlite になる

このため
db/development.sqlite3 がDBファイルになる

もしDBの中身をみたいのなら

1
rails db

とすると
sqlite コンソールを開けるので

1
.schema

とすると
作成したテーブルをみることができる

やり方は
テーブルスキーマ(構造)の確認

を参考にさせていただきました

ちなみに、sqlite3 の状態から抜けるには

1
 

とすればOK

rails 基礎(MVC)の model

rails 基礎(MVC)の model

rails ではDBを使ってデータ保存をする
model はDBに含まれるテーブルごとに用意される

model をつくるには
rails g model コマンドを使う

構文は

1
rails g model モデル名

基本的にはこれでOKだけど
model の名前は単数形にすること

そして model を決めるときに
オプションでカラム名とデータ型を決める
例えば
名前なら
name:string

メルアドなら
email:string
というかんじ

これで model名を Message としたいのなら

1
rails g model Message name:string email:string

というかんじになる

これを実行すると
models フォルダの中に
message.rb が作成され

db/migrate フォルダの中に
マイグレーションファイルが作成される
このときに実行したときの時間などがファイル名に書かれる

なお、model の class は
ActiveRecord::Base
というようにクラス継承によりDBのテーブルを使えるようになっている

1
2
3
4
5
6
7
8
9
10
class CreateMessages < ActiveRecord::Migration
  def change
    create_table :messages do |t|
      t.string :name
      t.string :email
 
      t.timestamps null: false
    end
  end
end

というコードの場合
< ActiveRecord::Migration により ActiveRecord::Migration クラスを継承している create_table :messages は messages テーブルの作成 t.string :name t.string :email は name と email というカラムを string型で作成という意味になる t.timestamps null: false はタイムスタンプの設定で 自動的に作成日時の crated_at そして 更新日時の updated_at をテーブルに追加する この行で null: false があるけど これは null 禁止のこと

rails 基礎(MVC)の controller

rails 基礎(MVC)の controller

controller は基本的に処理を担当する

作成するには

1
rails g contoller コントローラ名 アクション

という構文になる

もし messages コントローラへ index アクションをつくるのなら

1
rails g controller messages index

となる

index アクションは一覧表示につかう

ちなみに
messages というように複数形にしているけど
これは model つまりデータをあつかう
controller の場合は名前を複数形にするというルールがあるため

アクションについては
http://igarashikuniaki.net/rails_textbook/crud.html
をみると理解しやすい

解説が scaffold になっているけど
新規投稿などの入力関連は new
編集をしたいのなら edit
詳細を出したいのなら show
となる

もし、食べログみたいな投稿サイトなら
投稿なら new
詳細なら show
編集するのなら edit
というようになる

ちなみに

1
rails g controller messages index

を実行すると
対応する view も一緒に作成される

また、これにより
config/routes.rb に

1
get 'messages/index'

が追記される

URL関連は

1
raike routes

で確認できる

1
messages_index GET  /messages/index(.:format) messages#index

が実行結果

意味は
messages/index に
GETを送信したら
messages コントローラの index アクションを実行
という意味になる

でも一覧表示は / へアクセスしたときに出したいのなら

1
root 'messages#index'

と変更する

これで
localhost:3000
でアクセスしたときに一覧表示になる

messages#index

コントローラ名#アクション名
という意味

rails 基本復習

rails 基本復習

model DB
view 画面
controller 処理

routes でURLの割り当てをする
これで、コントローラのどのメソッドで処理するか決める

DB操作は controller が model を仲介してDBから
データ取得、作成、更新などをやる

view の描画については
controller で model からデータを取得して
view で wordpress みたいに画面表示する
なお部品ごとにファイルを分割可能

RESTと呼ばれる処理は
対象のURLに対する操作のこと

GET で取得
POST で作成
PATCH/PUT で更新
DELETE で削除
となる

twitter とかのようなシステムなら
/messages/1 というメッセージに対して
これらの処理をすることになる

この1は、メッセージのIDのこと

メッセージ関連とするなら
GET メッセージの一覧、詳細表示

POST メッセージ作成

PATH/PUT メッセージ更新

DELETE メッセージ削除

となる

次にDB
基本的にはデータの一元管理
データ保存、取得することが目的

ユーザとかメッセージなどはDBに格納される

RDB構造は
基本的に1つの rails に対し1つのDBとなる
あとはこのDBの中に複数のテーブル
つまりEXCELのシートみたいなものができている
で、EXCELシートの中がデータみたいなかんじ

RDBは
カラム(縦列)
レコード(横列)
でできている(EXCELふうにいうと)

そしてカラムにどういうデータを保存するのかを指定する
例えば名前なら varchar 型

rails でやるときの注意点としては
NULL を nil として表現すること
NULL禁止にするとNULLが入ったレコードが保存不可になる

あと rails だと id が primary key 扱うになる

ruby on rails で bootstrap

手軽に導入できる!Ruby on RailsでBootStrapを使う方法【初心者向け】

に載っていた内容に興味があったので
せっかくなので、過去にドットインストールで ruby on rails で作成したものを改造することに

まず

1
cd heroku/mymemo/

でプロジェクトに移動

次に

1
vim app/views/memos/index.html.erb

でファイルを開き、ボタンのコードに class 設定を追加

あまり改造するとわかりにくくなるので

1
<td><%= link_to 'Show', memo %></td>

の部分を

1
<td><%= link_to 'Show', memo ,class: "btn btn-lg btn-primary" %></td>

として保存

次に

1
vim Gemfile

で Gemfile の最終行に追記します

ちなみに、バージョンが古いかな?と調べてみたら
Rails 4 で Twitter Bootstrap と Font Awesome を利用する手順


Font Awesome の入れ方も書いてあったので、こちらも追加することにします

1
2
gem 'bootstrap-sass', '~> 3.2.0'
gem 'font-awesome-sass'

を最終行に追記します
そしてGemfile を読み込むため

1
bundle install

を実行します

次に、Bootstrap と Font Awesome を適用するため
application.css に追記します

1
vim app/assets/stylesheets/application.css

でファイルを開き

1
2
3
4
@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome-sprockets";
@import "font-awesome";

をファイル末尾に追記します

これで動作すると思ったのですが、反映されないため
bootstrap に関しては
https://github.com/twbs/bootstrap-sass

Font Awesome に関しては

http://fortawesome.github.io/Font-Awesome/get-started/

を参考にすることにしました
まず

1
vim Gemfile

でファイルを開き

1
gem 'sass-rails', '>= 3.2'

を追加し、再度

1
bundle install

を実行
しかし、

1
2
3
4
5
6
7
8
[!] There was an error parsing `Gemfile`: You cannot specify the same gem twice with different version requirements.
You specified: sass-rails (~> 5.0) and sass-rails (>= 3.2). Bundler cannot continue.
 
 #  from /home/snowpool/dotinstall/heroku/mymemo/Gemfile:52
 #  -------------------------------------------
 
 >  gem 'sass-rails', '>= 3.2'
 #  -------------------------------------------

となるため、すでにインストール済みとのこと
次に

1
vim app/assets/stylesheets/application.scss

でファイルを作成し

1
2
3
4
@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome-sprockets";
@import "font-awesome";

を記述し、保存
これだけだと反映されないため、

1
2
3
cd app/assets/stylesheets/
cp application.css application.css_bak
rm application.css

として、application.css を削除したところ
無事に反映されました

なお、Font Awesome も反映されるか確かめたかったので

1
vim app/views/memos/index.html.erb

でファイルを開き

1
<i class="fa fa-home"></i>

を追記してから

1
rails s

で起動

これでブラウザで確認したところ、無事に変更が反映されていました

rails-tw

はじめての ruby on rails

はじめての ruby on rails

rails を使いアプリを作るには rails new コマンドを使う

rails new アプリ名
となる

なお、以前に rails をインストールしたものの
.bash_profile にパスを通しても
反映されていないため、
.bashrc にパスを通すことに

Ruby on Rails 4.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました

を参考に、パスを通すようにしました

1
2
3
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL

今回は

1
rails new myapp

とした

実行するといろいろファイルが作られ
最後 bundle install が実行される

この bundle install は
必要なライブラリをインストールしている状態のこと

なお、実行にはかなり時間がかかる
終わったら

1
cd myapp

して

1
rails server

を実行すれば php -S でやったように
サーバーが起動する
なお、略式で

1
rails s

でもOK

もしエラーがでるのなら

1
vim Gemfile

で設定ファイルを編集する

これで

1
rails s

でサーバーを起動し

1
WEBrick::HTTPServer#start: pid=5181 port=3000

というようにでればOK

これは WEBrick というサーバーで
ポート3000番で起動している

なので
http://IPアドレス:3000
でアクセスできる

以下のように表示されればOK

rails

必要なものは
app
config
db
の内容

app の中に
Model
View
Controller
があるのでここにプログラムを書いていくことになる