Ruby on Rails 初歩
MVCに沿った初歩的なことを学習した。
参考:Progate Ruby on Rails
- この記事を読むにあったって必要になりそうな知識
- HTMLの知識
- Ruby基礎
- SQLの基礎
プロジェクト作成
#プロジェクト作成
$rails new アプリケーション名前
#サーバーを立ち上げる localhost:???? でアクセス
$rails sever
#コントローラを作成する
#rails generate controller コントローラ名 アクション名
$rails generate controller home top
#localhost:????/home/top
#コマンドによってページが自動生成される
##Controller
アプリケーション名/app/controller/controller.rb
class HomeController < ApplicationController
def top
end
end
アプリケーション名/config/routes.rb
Rails.application.routes.draw do
get"home/top" => "home#top"
#URL コントローラー名#アクション名
end
##実際に使用する
localhost:????/ranking にアクセスを行えるようにする
遷移先にrankingを作ってみる
つまり
localhost:????/ranking でアクセスを行えるようにURL遷移をさせる処理の記述をしてみる
class HomeController < ApplicationController
def top
end
#対応するルーティング、アクションを追加 ここではranking
def ranking
end
end
##ルーティングを表にするとこんな感じになります。
URL | コントローラ | アクション |
---|---|---|
home/top | home | top |
ranking | home | ranking |
Rails.application.routes.draw do
get"home/top" => "home#top"
# URL コントローラー名#アクション名
get"ranking" => "home#about"
end
##View
html.erbで記述をする
Rubyをhtml.erbに記述する方法
感想:原則は使わないほうがいい?コードの可視性が悪くなるかも
例:リストをループさせる
<%
lists = [
"good",
"bad"
]
%>
<% lists.each do|list|% >
<div class="list">
<% list %>
</div>
<% end %>
###Controllerに変数を格納して実行する場合
class HomeController < ApplicationController
#@をつけること
def top
@lists = [
"good",
"bad"
]
end
end
<% @lists.each do|list|% >
<div class="list">
<% list %>
</div>
<% end %>
##DBの準備 Model
マイグレーション DBのがわかるコードに変換
可能であればSQL文
[SELECT, INSERT, UPDATE, DELETE ]
が書けると理解が早いかもしれないです。
#rails generate これ長いから g でOKです
$rails g model Post contents:text
#Post・・・・・・・・posts usersなど複数形を作成する場合は単数形で
#content:・・・カラム名
#text・・・・・・・・データ型
上記を実行した時刻で作成される
アプリケーション名/db/migrate/yyyymmddhhmmss_create_posts.rb
中身
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :posts do |t|
t.text :content
t.timestamps
end
end
end
##エラー
###ActiveRecord::PendingMigrationError
$rails db:migrate を実行することでエラーは解決するかと思います。
マイグレーションファイルが存在する状態で、ページにアクセスすると
マイグレーションエラーが発生する。
##rails console について
対話型で処理が書ける
$rails console
>post = Post.new(content:"test")
#Postインスタンス生成
#postsテーブルのcontentにtestを
>post.save
#Postインスタンスをテーブルに保存
#DB Contentカラムに保存される
>quit 終了
##テーブルからデータを取り出す処理
$rails console
>post = Post.first
>post.content
>posts = Post.all
# SELECT "posts".* FROM "posts"
>posts[0]
#id: 1,
#content: "内容",
#created_at: Thu, 29 Oct 2020 16:14:30 JST +09:00,
#updated_at: Thu, 29 Oct 2020 16:14:30 JST +09:00>
> posts[0].content
=># "内容"
class HomeController < ApplicationController
#@をつけること DBから情報を取得する
def top
@posts = Post.all
end