##最初に
今までにWebフレームワークとしてDjangoやSpringBoot、Bubble(ノーコード)は使ったことがあったのですが、Ruby on Railsは触ったことがなく、興味本位で学習してみました。
Ruby on Rails5に入門した印象は、直感操作でシンプルに実装できるということです。個人的にはノーコードとDjangoの間を感じました。DB操作などもRailsからとても簡単にできたり、文法はわかりやすいですが、独自のルールがあったりして慣れればとても省エネでコードを書き進められそうです。
まだRailsに入門したてですが書いていて楽しいのは間違いないです。どんどん触ってみたいと思いました。
####コンソール系
アプリ作成
rails new アプリ名
rails new (アプリ名)でアプリ名のフォルダ作成が作成され、そのフォルダ内に開発に必要なフォルダやファイルなどが作成される。
.gitも自動で作成される
サーバー起動
rails server
Railsサーバーの起動(デフォルトのポート番号は3000)
serverはsに省略可能
ruby実行環境
rails console
exit
rails環境を読み込んだ状態でrubyコードを実行できるので、直接データの作成をしたり、メソッドを試したりできる。
exitで終了する。
consoleはcに省略可能
コントローラ作成
rails generate controller コントローラー名 アクション名
ルーティングの追加、コントローラファイル、ビューファイルが自動生成される。
generateはgに省略可能
同名のコントローラを作成できないので、アクションの2個目以降は直接コントローラやビューフォルダに追加していく必要がある。
モデル作成
rails g model モデル名 カラム名:データ型
モデルを作成する(カラム名:データ型は複数記載可能)
(例)rails g model User name:string email:string
モデル名は単数形かつ一番最初は大文字で記載する
マイグレーションファイル作成
rails g migration ファイル名
マイグレーションファイルを作成する
マイグレーション反映
rails db:migrate
Gemfile適用
bundle install
Gemfileを更新した際に適用する
####ルーティング
get "home/about" => "home#about"
get "/" => "home#top"
post "users/:id/create" => "users#create"
get(post) URL コントローラー名#アクション名で指定のアクションへルーティングする。
:id(htmlのname属性と一致する必要がある)とすると、アクション内でパラメーター(params[:id])が使用できる。
postはデータベースを変更する場合とsessionの値を変更する場合に使用
####DB操作
#全件取得
@hoge = Hoge.all
#一件取得
@hoge = Hoge.find_by(id: params[:id])
#複数件取得
@hoges = Hoge.where(huga_id: @huga.id)
#カウント
@Hoges = Hoge.where(huga_id: @huga.id).count
#新規作成
@user = User.new(name: params[:name], email: params[:email])
@user.save
#削除
@user = User.find_by(id: params[:id])
@user.destroy
params[:〇〇]でパラメタ取得(取得した値はstring型)
変数前に@をつけることでビューファイルやアクションで値を使用できる
####コントローラ
# ApplicationConrtollerを継承しているので
# 共通処理はapplication_controller.rbに記載する
class HogesController < ApplicationController
def create
end
end
# 一番最初に実行されるアクションを指定できる
# "before_action :アクション名"で全てのアクションを指定
# onlyでアクション(複数)の指定可能
before_action :アクション名, {only: :アクション名}
before_action :アクション名, {only: [:アクション名1, :アクション名2]}
# saveメソッドは返り値が真偽値なのでif文に組み込める
if @hoge.save
# sessionの作成
session[:hoge_id] = @hoge.id
# フラッシュメッセージの作成
flash[:notice] = "データベースへ登録しました"
# 他のurlに転送
redirect_to("/hoges/#{@hoge.id}")
else
# 他のビューファイルに転送
render("hoges/new")
end
sessionはページを移動してもユーザー情報を保持し続けるために用い、代入された値は、ブラウザに保存される。session[:キー名]=nilを代入するまで、保持される。
redirect_toはURLを指定する・・・redirect_to("URL")
renderはビューファイルを指定する・・・render("フォルダ名/ファイル名")
※先頭の"/"の有無に注意
renderとredirect_toと違って、アクション内で定義した@変数を指定したビューファイルでそのまま使用できる。(renderで指定したファイルのアクションで同じ@変数が定義されている必要あり)
####ファイルの扱い
image = params[:image]
File.binwrite("ファイルパス(public/フォルダ名/ファイル名)", image.read)
end
<!-- ファイルやcsvを送る際はmultipartが必要 -->
<%= form_tag("URL", {multipart: true}) do %>
<p>画像</p>
<input name="image" type="file">
<input type="submit" value="保存">
<% end %>
####モデル
インスタンスメソッドはモデルに記載
# gem 'bcrypt'を使用するとパスワードをハッシュ化できる
has_secure_password
#バリデーションの設定
#必須項目
validates :name, {presence: true}
#重複禁止
validates :email, {uniqueness: true}
#最大文字数
validates :content, {length: {maxinum: 140}}
#複数記載可能
validates :hoge, {presence: true, uniqueness: true}
#インスタンスメソッドはモデルに記載
def hoge
return Hoge.where(user_id: self.id)
end
####埋め込みruby(html.erb)
<% @hoges.each do |hoge| %>
<img src="<%= "/hoge_images/#{hoge.image_name}" %>">
<%= link_to(hoge.name, "/hoges/#{hoge.id}") %>
<% end %>
<!-- link_toにhtmlを埋め込みたい場合は以下 -->
<%= link_to(hoge.name, "/hoges/#{hoge.id}") do %>
<p>hogehoge</p>
<%= end %>