Rails
Code
ブロック
Pythonのデコレータみたいなかんじ 引数の塊(do ~ end 、もしくは{}で囲われた間)
map.with_index
Pythonのenumurateみたいなかんじ
users = ["taro", "jiro", "saburo"]
users.map.with_index { |user, i| "#{i+1}: #{user.name}" }
# 0: taro
# 1: jiro
# 2: saburo
初期値の指定
users.map.with_index { |user, i| "#{i+1}: #{user.name}" }
# 1: taro
# 2: jiro
# 3: saburo
ClassやModuleの同名
同名で定義すると同じClassないしModuleに対しての追加として扱われる(どのファイルからでもメソッド追加などができる)
括弧省略
- rubyはメソッドを実行する時などに括弧を省略できる。まじで最初戸惑う。
- 引数を渡す場合も以下の2通りの書き方がある
def hoge(arg)
p arg
end
# 結果は同じ
hoge("kakko")
hoge "kakko"
classやmodule名
ファイル名はスネークケース、クラスやモジュール名はスネークケースをアッパーキャメルケースにしたものにすること
Routes
application.html.erb
/app/views/application.html.erb
まずはこのHTMLが呼び出され、その後に適応したファイルを参照しにいく
定義ファイル
config/routes.rb
draw
(例)admin
Rails.application.routes.draw do
draw "admin"
end
drawで以下パスのファイルをrouting設定として読み込むことができる
/config/routes/admin.rb
デフォルトで参照するテンプレートのPath
app/views/<CONTROLLER_NAME>/<METHOD_NAME>.html.erb
renderやredirect_toなどが未記載の場合はここを参照しに行く
予約変数
present?, nil?, empty?, blank?
基本的に変数の中身の存在確認をしている 参考
Model
belongs_to
参照元から参照先への関係を定義
has_many
1:多の関係を定義
Class User
has_many :posts
end
Class Post
belong_to :user
end
という定義をした場合、新規にPostを作成したい場合は
@post = @user.post.create
で使用することができる。つまり、単に関係性を定義するだけではなくプロパティとして使用することが可能になる
scope
実行したい処理を予め定義しておける
(例)削除フラグがfalseのレコードのみ取得
scope :active, -> { where(is_deleted: false) }
dependent
一緒に削除したりする 参考
accepts_nested_attributes_for
子モデルも同時に取り扱う 参考
merge
merge先のscopeが使える 参考
class_name
delete, destroy
- delete
- リレーションは削除しない
- destroy
- リレーションも削除する
joinsの時の単数形、複数形
buildメソッド
リレーションのある子モデルのインスタンスを生成するときに使用 参考
build_hoge 参考
railsのaccepts_nested_attributes_forでhas_oneな時の注意点
レンダリング
html_safe, raw, <%==
基本的に変数展開に使用している 参考
form_for
既存のレコードならupdate, 新規ならinsert(create?)してくれる
render partial
- 部分的なテンプレ=と呼び出しに使用する
- テンプレートファイルのファイル名の先頭は_(アンダーバー)になる 参考
gem
device
bundle exec
bundle exec
をつけると、 Gemfile.lockの内容に従って各gemのバージョンが決定される
参考
テスト
rspec
おまけ
order by field ~
指定した順番でそーとしたい時 参考
React
state
状態の管理をするもの。各画面でこのstateの値を参照することで、データ共有ができる 参考