Ruby on Rails Primer

ruby on rails の特徴

  • MVCモデルを採用

Model

  • Model は ActiveRecord を利用
  • SQLite3, MySQL, PostgreSQL に標準対応

View

  • ERB(Embedded RuBy), Haml, Slim といったテンプレートエンジンを利用

Controller

  • Action(GET, POST, PATCH(PUT), DELETE) を定義

install(centos)

    # ruby -v
    ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
    
    # gem install rails
    # gem list rails
    *** LOCAL GEMS ***

    rails (4.2.4)
    rails-deprecated_sanitizer (1.0.3)
    rails-dom-testing (1.0.7)
    rails-html-sanitizer (1.0.2)
    sprockets-rails (3.0.0.beta2)

    # rbenv rehash
    # rails -v
    Rails 4.2.4

    # cd /opt/; pwd
    # rails new book_library
    # cd book_library

    # vim Gemfile
    gem 'rb-readline'

    # bundle install --path vendor/bundle

    # bundle exec rails generate scaffold book title:string author:string outline:text
    # bundle exec rake db:migrate
    # bundle exec rails server

Management version

    # cd /opt/book_library; pwd
    # git init
    # vim .gitignore
    doc/
    *.swp
    *~
    .project
    .DS_Store
    .idea
    .secret

    # git add .
    # git status
    # git commit -m "initialize repository"
    # git log
    commit c1740fbff8c95ddf37b4e166d660ce42aee6d033
    Author: tsujimitsu <tsujimitsu@codelogue.com>
    Date:   Sun Aug 30 15:33:17 2015 +0900

    initialize repository

    # rm -rf app
    # ls -ld app
    ls: cannot access app: No such file or directory

    # git checkout -f
    # ls -ld app
    drwxr-xr-x 8 root root 4096 2015-08-30 15:47 app

    # git branch
    * master
    # git checkout -b modify-readme
    # git branch
      master
    * modify-readme

    # git mv README.rdoc README.md
    # git commit -a -m "Improve the README file"

    # git branch
      master
    * modify-readme
    # git checkout master
    # git branch
    * master
      modify-readme

    # git merge modify-readme
    # git branch -d modify-readme

    # vim Gemfile
    group :production do
      gem 'pg'
      gem 'rails_12factor'
    end

Database

  • Active Record 経由での接続設定は config/database.yml で行う。

Contents

  • 静的コンテンツは root/public 配下に配置する。
  • root へのアクセスをコントローラで処理する場合は public/index.html は削除しておく。
  • 部分でンプレートは「_form.html.erb」のようにアンダーバーで始める

Heroku

    # cd /tmp; pwd
    # wget -O- https://toolbelt.heroku.com/install.sh | sh
    # vim /root/.bashrc
    PATH=$PATH:/usr/local/heroku/bin
    # source /root/.bashrc
    # heroku version
    heroku-toolbelt/3.41.4 (x86_64-linux) ruby/2.1.2
    You have no installed plugins.
  
    # heroku login
    # cd /opt/book_library/; pwd
    # heroku create
    # git push heroku master

    heroku はsqliteに対応していなかったのでpostgresqlへ変更予定

Ruby

    クラスのgetterは「attr_reader」で一元定義できる
    クラスのsetterは「attr_writer」で一元定義できる
    上記2つは「attr_accessor」でまとめて定義できる

    クラスメソッドは以下のようにクラス名を含めて定義する
    def Classname.data
    end
    もしくは
    def self.data
    end
    クラス変数は@@で定義する

ruby on rails

  • link_to helper でリンクは表示させる
  • リンクは名前付きルートで指定可能(/aboutであれば about_path とか)
  • view の共通部分は「application.html.erb」に記載される
  • rails console でCLI操作できる
  • rails console を見やすくするhirb, pry-rails, hirb-unicode
  • rails ではメソッド(GET, POST)をVERBという

CRUD(Webサービスを構成する7つのアクション)

  • create(作成)
    • new(新規作成画面)
    • create(作成・保存)
  • read(取得)
    • index(一覧表示画面)
    • show(詳細表示画面)
  • update(更新)
    • edit(更新画面)
    • update(更新・保存)
  • delete(削除)
    • destroy(削除)

ominiauth-facebook

    # vim Gemfile
    gem 'omniauth'
    gem 'omniauth-facebook'

    # bundle install --path vendor/bundle
    # vim ../config/initializers/omniauth.rb
    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :facebook, ENV['FB_APP_ID'], ENV['FB_SECRET']
    end

    OmniAuth.config.on_failure = Proc.new { |env|
      OmniAuth::FailureEndpoint.new(env).redirect_to_failure
    }

    ... controller などを作る...

    # bundle exec rails g model SocialProfile user:references provider uid name nickname email url image_url description other:text credentials:text raw_info:text
    # bundle exec rake db:migrate

    % facebook settings - Basic
    Display name: httpproxy
    Namespace: httpproxy
    App Domains: fbproxy.codelogue.com
    Website
    - Site URL: http://fbproxy.codelogue.com:3000/

    % facebook settings - Advanced
    Server IP Whitelist: xxx.xxx.xxx.xxx
    Valid OAuth redirect URIs: http://fbproxy.codelogue.com:3000/auth/facebook/callback

SQL

    bundle exec rails dbconsole
    .table
    .schema tablename
    select * from tablenamel
    .quit

    bundle exec rake db:drop:all

bootstrap

    #rails new cafelogue --skip-bundle
    #vim Gemfile
    gem 'rb-readline'
    gem 'less-rails'
    gem 'therubyracer'
    gem 'execjs'
    gem 'twitter-bootstrap-rails'
    #bundle install --path vendor/bundle
    #bundle exec rails g scaffold user name:string password:string email:string regist_date:date
    #bundle exec rake db:migrate
    #bundle exec rails g bootstrap:install less
    #bundle exec rails g bootstrap:themed Users

devise_invitable

reference

comments powered by Disqus