この記事は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設計
他に使うもの
Model
1 2 3 4 5
| rails g model Name sub:string sub:text... # Name: モデル名、単数かつ頭大文字がよし # sub: 各パラメータ
# created_atとupdated_atは自動で生成される
|
初期データ定義
db/seeds.rb
をいじる。
rubyを直接書ける。
1 2 3
| 5.times do |i| Name.create(title: 'title #{i}', body: 'body #{i}') end
|
詳細定義
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 2 3
| resources :names do resources :name2s end
|
1
| resources :names, only: [:create, :destroy]
|
1
| resources :names, except: [:create, :destroy]
|
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.order
やfind
はActive 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
|
View
全体管理
app/views/layouts/application.html.erb
を参照。
railsで生成された要素は<%= yield =>
部に入る。
CSS
app/assets/stylecheets/application.css
を参照。
新規作成
Model-Controllerに紐付けて作る。
app/views/names/
に関数名.html.erb
を作成。
erb記法
ファイル編集例(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 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
| Name.create(title: 'title 2', body: 'body 2')
|
1 2 3 4
| # 定義 n = Name.new(title: 'title 1', body: 'body 1') # 書き込み n.save
|
rails dbconsole
railsで管理するデータベースのCUIを操作する。
データを見ながら編集するときなどに使う。
SQLで操作できる。
Modelのテーブルはnames
のように小文字+複数形になっている。
1 2
| select * from names; # シンプルなSQL文
|
session, cookies
1 2
| session[:name] = a cookies[:name] = a
|
1 2
| if session[:name] if cookies[:name]
|
その他用語等
CoC
細かいファイル配置などが決まっているからこそ書くコードが少なくて済むという思想・規約。
Active Record
Railsで開発されているSQLみたいなやつ。ドットインストール有料。