Ruby on Rails を学んでいる
なるほどと思ったことや、メモとして残したいことをじわじわ残していってるので、少しずつ内容は変化してます。あしからず。
主な参考
START
ruby -v
sqlite3 --version
rails --version
rails new <プロジェクト名>
# カレントディレクトリ/<プロジェクト名> にファイルが生成される
↑だと、正直いらないcoffee script
とかまで自動導入されてしまうので、
rails new <プロジェクト名> -B
# カレントディレクトリ/<プロジェクト名> にファイルが生成される
でファイル生成だけ行い、Gemfileを編集する。
.sassファイルを生成するようにする
config.sass.preferred_syntax = :sass
Gem 周り
Gemfile: Node.js環境で言うところのpackage.json内依存モジュール一覧と似たようなもの。
# gem 'coffee-rails', '~> 4.2'
gem 'hamlit-rails'
# いろいろ種類があるがこれが一番高速らしい
# Slimも魅力的であるが、slim-railsより高速らしいのでこちらを選択。
gem 'erb2haml'
group :development do
# 追記
# better errors
gem 'better_errors'
gem 'binding_of_caller'
end
# step by step debug
gem 'pry-byebug'
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は自動で生成される
rails db:migrate
rails db:migrate:reset
初期データ定義
db/seeds.rb
をいじる
rubyを直接書ける
5.times do |i|
Name.create(title: 'title #{i}', body: 'body #{i}')
end
rails db:seed
詳細定義
app/models/name.rb
をいじる
validates :sub, presence: true, length: { minimum: 3 }
# presence: true > 入力必須
これを定義した場合、サーバーサイドValidationでErrorが出た場合のController/Viewを定義する必要があるので留意(参考)
has_many :name2s, dependent: destroy
Controller
ModelとViewをつなぐ役割。Modelを基準に生成する
rails g controller Names
# app/controllers/names_controller.rbが生成
routing
=URLとControllerの紐付け
config/routes.rb
を編集する
resources :names
resources :names do
resources :name2s
end
resources :names, only: [:create, :destroy]
resources :names, except: [:create, :destroy]
root 'names#view名'
rails routes
# これを基準に関数を作ったりPrefixを使ったりできる
ファイル編集例
def index
@names = Name.all.order(created_at: 'desc')
end
# GETやPOSTで呼ばれた際に使える(routesで確認)
def show
@name = Name.find(params[:id])
end
all.order
やfind
はActive Recordを参照
def create
# @name = Name.new(param.[:name])では「厳密な引数指定をしていない」=「悪意のあるリクエストを受け付けてしまうおそれがある」というエラーが出る
@name = Name.new(param.require(:name).permit(:sub1, :sub2))
@name.save
redirect_to names_path
end
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
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記法
<% %>
<%= %>
ファイル編集例(erb)
<h2>一覧</h2>
<ul>
<% @names.each do |post| %>
<li><%= name.title %></li>
<% end %>
</ul>
変数@names
などは、controllerで指定したものをそのまま呼び出せる
ファイル分割
<!-- 正式名称:Partial -->
<p>hello</p>
<%= render 'hello' %>
ヘルパー
関数的動きをする決まった書き方
<h2>一覧</h2>
<ul>
<% @names.each do |post| %>
<li>
<%= link_to '表示する文字列', Link_URL %>
</li>
<% end %>
</ul>
<%= link_to '表示する文字列', Prefix_path %>
<%= link_to '表示する文字列', Prefix_path(name.id) %>
<%= link_to '表示する文字列', Prefix_path(name) %>
<%= 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: '確認?' }%>
<!-- app/assets/images/ にファイルを設置 -->
<!-- ヘルパーは()で設定を囲める -->
<%= image_tag('ファイル名.png', class:className) %>
<%= 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>
<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みたいなやつ。ドットインストール有料。