LoginSignup
0
0

More than 1 year has passed since last update.

Progate Ruby on Rails5 I〜III 個人的ざっくりまとめ

Last updated at Posted at 2021-10-08

Railsの立ち上げ

ターミナル
$ rails new アプリケーション名     例) rails new tweet_app

$ rails server

上記入力後、ブラウザのurlに「localhost:3000」を入力し、「Yay!You're on Rails!」と書いてあるページが表示されていればOK

ページ作成

○ページ作成に必要なもの
・ ビュー
・ コントローラ
・ ルーティング

ビュー

ビューとは、ページの見た目を作るHTMLファイルのこと。

ターミナル
$ rails generate controller コントローラ名 アクション名

例)rails generate controller home top または、 rails g controller home top でもOK

「rails g controller home top」でviewsフォルダの中にhomeフォルダとtop.html.erbファイルが作成される。

app/views/home/top.html.erb
<h1>Home#top</h1>
<p>Find me in app/views/home/top.html.erb</p>

コントローラ

ページを表示するとき、railsではコントローラを経由して、ブラウザに返している。

先ほど、「rails g controller home top」を実行したとき、同時にコントローラも作成されており、コントローラファイルの場所は、「app/controllers/home_controller.rb」である。

また、rails g controllerでtopアクションも指定しているため、home_controller.rbの中身は以下のようになっている。

app/controllers/home_controller.rb
class HomeController < ApplicationController
  def top #アクション
  end
end

コントローラ内のアクションは、コントローラと同じ名前のビューフォルダから、アクションと同じ名前のHTMLファイルを探して、ブラウザに返す役割を担っている

ルーティング

ページを表示するときコントローラを経由していたが、ブラウザとコントローラを結ぶ役割がルーティングである。

ルーティングは対応表にして考えるとわかりやすい

URL コントローラ アクション
home/top home top

ルーティングが定義されている場所は、「config/routes.rb」で、中身は以下のようになっている

config/routes.rb
Rails.application.routes.draw do
  #get "URL" => "コントローラ名#アクション名"
  get "home/top" => "home#top" #localhost:3000/home/top

  #URLの部分を「top」に変えると、localhost:3000/topでアクセスできるようになる
  get "top" => "home#top" #localhost:3000/top

  #トップページの場合は、URLの部分を"/"にする
  get "/" => "home#top"
end

CSSファイルや画像を保存するファイルの場所

○CSSファイル
「app/assets/stylesheets/コントローラ名.scss」

○画像を保存するファイル
「public/画像名」

<% %>と<%= %>

<% %>は中身が表示されないので、変数の定義などに使われる。
<%= %>は中身が表示される。

<% language = "Ruby" %>

<%= language %>を学ぼう
Rubyを学ぼう

<% language %>を学ぼう
を学ぼう

@変数

通常、アクションで定義した変数をビューでそのまま使用することはできない。
そこで、「@変数」とすることで、ビューでも使えるようにする。

posts_controller.rb
class PostsController < ApplicationController
  def index
    @post1 = "hogehoge"

    post2 = "fugafuga"
  end
end
posts/index.html.erb
<%= @post1 %>
hogehoge

<%= post2 %>
※エラー発生

テーブル作成(モデルとマイグレーション)

ターミナル
$ rails g model モデル名 カラム名:データ型

例) rails g model Post content:text

上記をターミナルに入力し実行すると、「モデルが定義されたファイル」と「マイグレーションファイル」の2つファイルが生成される。

モデルが定義されたファイルの場所は、「app/models/ファイル名.rb」(ファイル名は単数形)

models/post.rb
class Post < ApplicationRecord
end

マイグレーションファイルの場所は、「db/migrate/マイグレーション名.rb」

db/migrate/20170228021417_create_posts.rb
class CreatePosts < ActiveRecord::Migration[5.0]
  def change
    create_table :posts do |t|
      t.text :content

      t.timestamps
    end
  end
end

マイグレーションファイルを使って、データベースに変更を反映するにはターミナルに以下を実行する

ターミナル
$ rails db:migrate

rails console

rails consoleはRubyのコードを手軽に実行できる。「quit」でやめることができる。

ターミナル
$ rails console
Loading Development environment (Rails 5.0.1)
[1]pry(main) > 1 + 1 
=> 2
[2]pry(main) > text = "Hello"
=> "Hello"
[3]pry(main) > text + "World"
=> "HelloWorld"
[3]pry(main) > quit

saveメソッド

saveメソッドはデータベースに保存するメソッド。
例えば、作成したPostインスタンスをpostsテーブルに保存するとき。(このとき、saveメソッドが使えるのは、PostモデルがApplicationRecordを継承しているから)

ターミナル
$ rails console
> post = Post.new(content: "Hello World")
> post.save

firstメソッド

firstメソッドはテーブルの最初のデータを取得できる。

postsテーブル

id content
1 hogehoge
2 fugafuga
ターミナル
> post = Post.first
> post.content
=> "hogehoge"

allメソッド

allメソッドはテーブルの全てのデータを取得できる。
index番号を指定することで特定の箇所のデータを取得することもできる。

postsテーブル

id content
1 hogehoge
2 fugafuga
ターミナル
> post = Post.all[1].content
=> "fugafuga"

link_toメソッド

link_toメソッドは「第一引数に表示する文字」、「第二引数にURL」

application.html.erb
<%= link_to("News", "/news") %>

↓ 以下のように変換される

application.html
<a href="/news">News</a>

find_byメソッド

find_byメソッドは、特定のidの投稿を取得できる。(allメソッドのindex番号指定でも同じことができる)

postsテーブル

id content
1 hogehoge
2 fugafuga
ターミナル
> post = Post.find_by(id: 1)
> post.content
=> "hogehoge"

変数Params

変数Paramsは、ルーティングで設定したURLの「:id」の値を取得できる。
コントローラのアクション内で使う。

例)ルーティングを「localhost:3000/posts/1」に設定した場合

get "post/:id" => "post#show"
posts_controller.rb
def show
  @id = params[:id]
end
posts/show.html.erb
<%= @id %>

結果は「1」と出る

ルーティングでデータベースに変更を加えるアクションの場合は「get」ではなく「post」

routes.rb
post "posts/create" => "posts#create"

form_tagメソッド

form_tagメソッドは、フォームに入力されたデータを送信することができる。
「form_tag(送信先のURL) do」のように送信先のURLを指定し、そこにデータを送信する。

posts/new.html.erb
<%= form_tag("/posts/create") do %>
  <textarea name="content"></textarea>
  <input type="submit" value="投稿">
<% end %>

name属性を指定したフォームに入力されたデータは、コントローラのアクション内で受け取ることができる。
フォームのデータは変数paramsで受け取る。
paramsはname属性に設定した文字列をキーとしたハッシュになっている。

posts_controller.rb
def create
  params[:content]
end

#textareaでhogehogeと打って投稿ボタンを押すと、params[:content]にはhogehogeというデータが入ってくる

redirect_toメソッド

redirect_toメソッドは、他のURLに転送することができる。
「redirect_to("URL")」とすることで、そのページに転送することができる。

posts_controller.rb
def create
  redirect_to("/posts/index")
end
0
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
0
0