13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-31

Ruby on Rails を学んでいる

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

主な参考

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みたいなやつ。ドットインストール有料。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?