ubuntu14.04 ruby rails アップデート

rails g devise:views

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

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

 cd ~/.rbenv/
git pull

で rbenv をアップデート

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

rbenv install -l 

で表示されるのは
2.3.1 まで

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

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

で更新

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

 rbenv install 2.5.0

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

 rbenv global 2.5.0

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

gem update --system

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

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

を参考に

gem install rails

として
rails 再インストール

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

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

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

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

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

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

Message.find(1)

というかんじ

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

hoge_msg = Message.find(1)

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

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

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

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

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

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

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

というようになる

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

Message.where(body:"hello")

とすればいい

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

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

rails c

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

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

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

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

として
次に

msg.save

とすると保存される

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

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

=> true

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

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

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

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

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

quit

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

rails のマイグレーション

rails のマイグレーション

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

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

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

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

これができた状態で

rake db:migrate

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

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

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

rake db:migrate

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

なので、

rake db:migrate

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

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

実行すると

== 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の中身をみたいのなら

rails db

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

.schema

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

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

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

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

.q

とすればOK

rails 基礎(MVC)の model

rails 基礎(MVC)の model

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

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

構文は

rails g model モデル名

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

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

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

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

rails g model Message name:string email:string

というかんじになる

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

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

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

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 は基本的に処理を担当する

作成するには

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

という構文になる

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

rails g controller messages index

となる

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

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

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

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

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

ちなみに

rails g controller messages index

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

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

get 'messages/index'

が追記される

URL関連は

raike routes

で確認できる

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

が実行結果

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

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

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 で作成したものを改造することに

まず

cd heroku/mymemo/

でプロジェクトに移動

次に

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

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

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

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

の部分を

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

として保存

次に

 vim Gemfile

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

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


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

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

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

bundle install

を実行します

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

vim app/assets/stylesheets/application.css 

でファイルを開き

@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/

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

 vim Gemfile

でファイルを開き

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

を追加し、再度

 bundle install

を実行
しかし、

[!] 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'
 #  -------------------------------------------

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

 vim app/assets/stylesheets/application.scss

でファイルを作成し

@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome-sprockets";
@import "font-awesome";

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

cd app/assets/stylesheets/
cp application.css application.css_bak
rm application.css

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

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

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

でファイルを開き

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

を追記してから

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 にインストールする手順をかなり丁寧に説明してみました

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

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

今回は

rails new myapp

とした

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

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

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

cd myapp 

して

rails server

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

rails s 

でもOK

もしエラーがでるのなら

vim Gemfile 

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

これで

rails s 

でサーバーを起動し

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

というようにでればOK

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

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

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

rails

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

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