sKawashima

Development

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

#Ruby#Rails

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

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


主な参考

START

各種環境が導入されていることを確認
ruby -v
sqlite3 --version
rails --version
プロジェクト作成
rails new <プロジェクト>
# カレントディレクトリ/<プロジェクト名> にファイルが生成される

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

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

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

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

config/application.rbに追記
config.sass.preferred_syntax = :sass

Gem 周り

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

CoffeeScript無効化(コメントアウトのみ)
# gem 'coffee-rails', '~> 4.2'
Haml導入
gem 'hamlit-rails'
# いろいろ種類があるがこれが一番高速らしい
# Slimも魅力的であるが、slim-railsより高速らしいのでこちらを選択。
gem 'erb2haml'
Debug環境強化
group :development do
  # 追記
  # better errors
  gem 'better_errors'
  gem 'binding_of_caller'
end
# step by step debug
gem 'pry-byebug'
開発補助系gem
group :development do
  # 追記
  # モデルファイルの情報追加
  gem 'annotate'
end

フォルダ構成

実際に操作するもの

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

appフォルダ

MVC設計

  • models
  • views
  • controllers

他に使うもの

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

Model

ファイル生成
rails g model Name sub:string sub:text...
# Name: モデル名、単数かつ頭大文字がよし
# sub: 各パラメータ

# created_atとupdated_atは自動で生成される
DB生成
rails db:migrate
DBを全削除
rails db:migrate:reset

初期データ定義

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

4つの初期データを生成する場合
5.times do |i|
  Name.create(title: 'title #{i}', body: 'body #{i}')
end
seedから初期データ生成
rails db:seed

詳細定義

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

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

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

別のModelとの紐付け
has_many :name2s, dependent: destroy

Controller

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

ファイル生成
rails g controller Names
# app/controllers/names_controller.rbが生成

routing

=URLとControllerの紐付け。

config/routes.rbを編集する。

Modelについて自動生成
resources :names
別Modelに紐付けたModelについて自動生成
resources :names do
  resources :name2s
end
一部のroutingのみを自動生成
resources :names, only: [:create, :destroy]
一部のrouting以外を自動生成
resources :names, except: [:create, :destroy]
root(/)指定
root 'names#view名'
全Routing確認
rails routes

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

ファイル編集例

一覧取得
def index
  @names = Name.all.order(created_at: 'desc')
end
Requestパラメータの利用
# GETやPOSTで呼ばれた際に使える(routesで確認)
def show
  @name = Name.find(params[:id])
end

all.orderfindActive Recordを参照。

Modelの追加保存(フォームから呼び出す形式で)
def create
# @name = Name.new(param.[:name])では「厳密な引数指定をしていない」=「悪意のあるリクエストを受け付けてしまうおそれがある」というエラーが出る
  @name = Name.new(param.require(:name).permit(:sub1, :sub2))
  @name.save

  redirect_to names_path
end
Controller内の関数
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
404を返す
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記法

ruby式を埋め込む
<% %>
ruby式を埋め込み、評価結果をエスケープして埋め込む
<%= %>

ファイル編集例(erb)

一覧表示
<h2>一覧</h2>
<ul>
  <% @names.each do |post| %>
  <li><%= name.title %></li>
  <% end %>
</ul>

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

ファイル分割

_hello.html.erb
<!-- 正式名称:Partial -->
<p>hello</p>
index.html.erb
<%= render 'hello' %>

ヘルパー

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

link_to
<h2>一覧</h2>
<ul>
  <% @names.each do |post| %>
  <li>
  <%= link_to '表示する文字列', Link_URL %>
  </li>
  <% end %>
</ul>
routesのPrefixの利用
<%= link_to '表示する文字列', Prefix_path %>
IDパラメータを渡す
<%= link_to '表示する文字列', Prefix_path(name.id) %>
IDパラメータを渡す(省略形)
<%= link_to '表示する文字列', Prefix_path(name) %>
methodの指定(Deleteなどに使う)
<%= link_to '表示する文字列', Prefix_path(name), method: :method %>
確認ダイアログを表示
<%= link_to '表示する文字列', Prefix_path(name), method: :method, data: { cinfirm: '確認?' }%>
改行で可視化できる
<%= link_to '表示する文字列',
    Prefix_path(name),
    method: :method,
    data: { cinfirm: '確認?' }%>
image_tag
<!-- app/assets/images/ にファイルを設置 -->
<!-- ヘルパーは()で設定を囲める -->
<%= image_tag('ファイル名.png', class:className) %>
form_for
<%= 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>
simple_format
<p><%= simple_format @name.sub %></p>
<!-- 改行を適切なタグに変えてくれる -->

rails console

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

入る
rails c
モデルにデータを追加
Name.create(title: 'title 2', body: 'body 2')
モデルにデータを追加(一旦定義)
# 定義
n = Name.new(title: 'title 1', body: 'body 1')
# 書き込み
n.save
モデルのデータを確認
Name.all

rails dbconsole

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

入る
rails db
テーブル一覧取得
.tables

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

特定のテーブルのデータ一覧取得
select * from names;
# シンプルなSQL文
.quit

session, cookies

設定
session[:name] = a
cookies[:name] = a
存在確認
if session[:name]
if cookies[:name]

その他用語等

CoC

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

Active Record

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