1
0

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 3 years have passed since last update.

Ruby on Rails5 速習してみた

Last updated at Posted at 2021-08-12

##最初に
今までに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を更新した際に適用する


####ルーティング

/config/routes.rb
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型)
変数前に@をつけることでビューファイルやアクションで値を使用できる

####コントローラ

/controllers/hoges_controller.rb
# ApplicationConrtollerを継承しているので
# 共通処理はapplication_controller.rbに記載する
class HogesController < ApplicationController
  def create
  end
end
controller.rb
# 一番最初に実行されるアクションを指定できる
# "before_action :アクション名"で全てのアクションを指定
# onlyでアクション(複数)の指定可能
before_action :アクション名, {only: :アクション名}
before_action :アクション名, {only: [:アクション名1, :アクション名2]}
controller
# 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で指定したファイルのアクションで同じ@変数が定義されている必要あり)

####ファイルの扱い

controller.rb
image = params[:image]
File.binwrite("ファイルパス(public/フォルダ名/ファイル名)", image.read)
end
html.erb
<!-- ファイルや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 %>

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?