Ruby on Rails 学習メモ的チートシート

この記事はQiitaに書いていた自身の記事のコピーです。

なるほどと思ったことや、メモとして残したいことをじわじわ残していってるので、少しずつ内容は変化してます。あしからず。


目次

主な参考

START

1
2
3
ruby -v
sqlite3 --version
rails --version
1
2
rails new <プロジェクト名>
# カレントディレクトリ/<プロジェクト名> にファイルが生成される

↑だと、正直いらないcoffee scriptとかまで自動導入されてしまうので、

1
2
rails new <プロジェクト名> -B
# カレントディレクトリ/<プロジェクト名> にファイルが生成される

でファイル生成だけ行い、Gemfileを編集する。

.sassファイルを生成するようにする

1
config.sass.preferred_syntax = :sass

Gem 周り

Gemfile: Node.js環境で言うところのpackage.json内依存モジュール一覧と似たようなもの。

1
# gem 'coffee-rails', '~> 4.2'
1
2
3
4
gem 'hamlit-rails'
# いろいろ種類があるがこれが一番高速らしい
# Slimも魅力的であるが、slim-railsより高速らしいのでこちらを選択。
gem 'erb2haml'
1
2
3
4
5
6
7
8
group :development do
# 追記
# better errors
gem 'better_errors'
gem 'binding_of_caller'
end
# step by step debug
gem 'pry-byebug'
1
2
3
4
5
group :development do
# 追記
# モデルファイルの情報追加
gem 'annotate'
end

フォルダ構成

実際に操作するもの

  • app: メイン
  • config: 設定
  • db: データベース

appフォルダ

MVC設計

  • models
  • views
  • controllers

他に使うもの

  • assets: 画像やJS,CSSをいれる

Model

1
2
3
4
5
rails g model Name sub:string sub:text...
# Name: モデル名、単数かつ頭大文字がよし
# sub: 各パラメータ

# created_atとupdated_atは自動で生成される
1
rails db:migrate
1
rails db:migrate:reset

初期データ定義

db/seeds.rbをいじる。
rubyを直接書ける。

1
2
3
5.times do |i|
Name.create(title: 'title #{i}', body: 'body #{i}')
end
1
rails db:seed

詳細定義

app/models/name.rbをいじる。

1
2
validates :sub, presence: true, length: { minimum: 3 }
# presence: true > 入力必須

これを定義した場合、サーバーサイドValidationでErrorが出た場合のController/Viewを定義する必要があるので留意(参考)。

1
has_many :name2s, dependent: destroy

Controller

ModelとViewをつなぐ役割。Modelを基準に生成する。

1
2
rails g controller Names
# app/controllers/names_controller.rbが生成

routing

=URLとControllerの紐付け。

config/routes.rbを編集する。

1
resources :names
1
2
3
resources :names do
resources :name2s
end
1
resources :names, only: [:create, :destroy]
1
resources :names, except: [:create, :destroy]
1
root 'names#view名'
1
2
3
rails routes

# これを基準に関数を作ったりPrefixを使ったりできる

ファイル編集例

1
2
3
def index
@names = Name.all.order(created_at: 'desc')
end
1
2
3
4
# GETやPOSTで呼ばれた際に使える(routesで確認)
def show
@name = Name.find(params[:id])
end

all.orderfindActive Recordを参照。

1
2
3
4
5
6
7
def create
# @name = Name.new(param.[:name])では「厳密な引数指定をしていない」=「悪意のあるリクエストを受け付けてしまうおそれがある」というエラーが出る
@name = Name.new(param.require(:name).permit(:sub1, :sub2))
@name.save

redirect_to names_path
end
1
2
3
4
5
6
7
8
9
10
11
def create
@name = Name.new(name_params)
@name.save

redirect_to names_path
end

private
def name_params
param.require(:name).permit(:sub1, :sub2))
end
1
render :status => 404

View

全体管理

app/views/layouts/application.html.erbを参照。

railsで生成された要素は<%= yield =>部に入る。

CSS

app/assets/stylecheets/application.cssを参照。

新規作成

Model-Controllerに紐付けて作る。
app/views/names/関数名.html.erbを作成。

erb記法

1
<% %>
1
<%= %>

ファイル編集例(erb)

1
2
3
4
5
6
<h2>一覧</h2>
<ul>
<% @names.each do |post| %>
<li><%= name.title %></li>
<% end %>
</ul>

変数@namesなどは、controllerで指定したものをそのまま呼び出せる。

ファイル分割

1
2
<!-- 正式名称:Partial -->
<p>hello</p>
1
<%= render 'hello' %>

ヘルパー

関数的動きをする決まった書き方。

1
2
3
4
5
6
7
8
<h2>一覧</h2>
<ul>
<% @names.each do |post| %>
<li>
<%= link_to '表示する文字列', Link_URL %>
</li>
<% end %>
</ul>
1
<%= link_to '表示する文字列', Prefix_path %>
1
<%= link_to '表示する文字列', Prefix_path(name.id) %>
1
<%= link_to '表示する文字列', Prefix_path(name) %>
1
<%= link_to '表示する文字列', Prefix_path(name), method: :method %>
1
<%= link_to '表示する文字列', Prefix_path(name), method: :method, data: { cinfirm: '確認?' }%>
1
2
3
4
<%= link_to '表示する文字列',
Prefix_path(name),
method: :method,
data: { cinfirm: '確認?' }%>
1
2
3
<!-- app/assets/images/ にファイルを設置 -->
<!-- ヘルパーは()で設定を囲める -->
<%= image_tag('ファイル名.png', class:className) %>
1
2
3
4
5
6
<%= form_for :name, url: names_path do |f| %>
<p>
<%= f.text_field :sub, placeholder: 'enter sub' %>
<%= f.text_area :sub, placeholder: 'enter sub' %>
<%= f.submit %>
</p>
1
2
<p><%= simple_format @name.sub %></p>
<!-- 改行を適切なタグに変えてくれる -->

rails console

直接データベースを弄ったりできる:ActiveRecord。

1
rails c
1
Name.create(title: 'title 2', body: 'body 2')
1
2
3
4
# 定義
n = Name.new(title: 'title 1', body: 'body 1')
# 書き込み
n.save
1
Name.all

rails dbconsole

railsで管理するデータベースのCUIを操作する。
データを見ながら編集するときなどに使う。
SQLで操作できる。

1
rails db
1
.tables

Modelのテーブルはnamesのように小文字+複数形になっている。

1
2
select * from names;
# シンプルなSQL文
1
.quit

session, cookies

1
2
session[:name] = a
cookies[:name] = a
1
2
if session[:name]
if cookies[:name]

その他用語等

CoC

細かいファイル配置などが決まっているからこそ書くコードが少なくて済むという思想・規約。

Active Record

Railsで開発されているSQLみたいなやつ。ドットインストール有料。