#マシンスペック
・バージョン 10.15.3
・Ruby ruby 2.6.3p62
・Rails 6.0.3.2
#まえがき
前記事では、データーベースをビューに表示する方法を記録しました。
しかし、せっかくRuby on Railsで作品を作りたいならid取得をやりたい!
ここでは、idによるデーターベース表示を忘却録として記録します。
何かにお役に立てたら嬉しいです。
#データーベースのidを取得したデータベースの表示
これからの作業は、すでにデーターベースを作成する必要がありますのでご注意ください。
詳しくは→前記事へ
##idのroutesを設定する
routesのイメージ
↓の感じに "投稿・登録" されたら "マイページ・詳細ページ" とかを id の数に合わせて作りたい
1~4がidになります。
Rails.application.routes.draw do
get 'コントローラー名/index'
get 'コントローラー名/1' => 'コントローラー名#アクション名'
get 'コントローラー名/2' => 'コントローラー名#アクション名'
get 'コントローラー名/3' => 'コントローラー名#アクション名'
get 'コントローラー名/4' => 'コントローラー名#アクション名'
end
このままでは routes がえらい多い記述になってしまうので↓のように記述します。
Rails.application.routes.draw do
get 'コントローラー名/:id' => 'コントローラー名#アクション名'
end
↓例
Rails.application.routes.draw do
get 'posts/:id' => 'posts#index'
end
先ほどの、1~4の部分を :id で置き換えています。
###routesでの注意!
routes上で↓の様になると、エラーになってしまいます。
(エラー)
Rails.application.routes.draw do
get 'コントローラー名/:id' => 'コントローラー名#アクション名' ←先に記述
get "/" => "forms#index"
end
get 'posts/:id' = 'posts#index' の :id ルートを通常のルートより先に記述してしまうとエラーになってしまいます。
なので、↓の様に記述すること。
(サクセス)
Rails.application.routes.draw do
get "/" => "forms#index"
get 'コントローラー名/:id' => 'コントローラー名#アクション名' ←後に記述
end
↓例
Rails.application.routes.draw do
get "/" => "forms#index"
get 'posts/:id' => 'posts#index' ←後に記述
end
##controllerへの記述
controllerは、この地点では初期設定で問題ありません。
class PostsController < ApplicationController
def アクション名
end
end
例↓
class PostsController < ApplicationController
def index
end
end
##URLからidを取得する
idを取得するには、コントローラーのアクションに params[:id] を使用します。
paramsは、値を受け取るメソッドになります。
class PostsController < ApplicationController
def アクション名
@id = params[:id]
end
end
controllerでは @ を付けなければいけないので @id にすることを忘れないでください。
例↓
class PostsController < ApplicationController
def index
@id = params[:id]
end
end
##Viewで表示する
<h1>Title</h1>
<p>smple text</p>
<%= "idが「#{@id}」の画面です" %>
ここで一度、ブラウザで確認しましょう
rails s
(URL) http://localhost:3000/posts/1
表示されました。
画像と、Qiitaでは文字の内容が異なりますが、気にしないでください。
<%= "idが「#{@id}」の画面です" %>
の #{@id} に idが読み込まれ、
また <%= ~~ %> なので、ビューに表示されてます。
ここまでは、URLとidについて設定しました。
ここからは、idに対応したデータを取得しましょう。
#idに対応したデータを取得
##controllerへの設定
idを等しく出力するために
find_by と params[:id] を使用します。
class PostsController < ApplicationController
def アクション名
@テーブル名 = データーベース名.find_by(id: params[:id])
end
end
↓例
class PostsController < ApplicationController
def index
@post = Post.find_by(id: params[:id])
end
end
###用語説明
find_by は、idのカラム値が "params[:id]" に等しい値を取得しています。
また
params[:id]は、ブラウザからRailsアプリケーションに送られてきたデータを保持するオブジェクトを保持できるようになります。
##viewsへの設定
最後にviewsへ設定を行います。
ここでは 投稿内容 と 投稿時間 を表示させましょう。
<h1>Title</h1>
<p>sample text</p>
<%= @post.content %>
<%= @post.created_at %>
以下
を入力し、ブラウザで確認してください。
rails s
rails console コマンドで test1 を入力したのですが、しっかり反映されています。
###要素の説明
<%= @post.content %>
→content(投稿テキスト)の取得
<%= @post.created_at %>
→投稿時間を取得
###おまけ/リンク
もしも、この投稿にリンクさせたい場合は、以下をviewsに記述してください。
<%= link_to(投稿.content, "/ページ名/#{post.id}") %>
例↓
<%= link_to(post.content, "/posts/#{post.id}") %>
以上のコードはGithubで公開しています。
気になるかたは、ダウンロードしてください。
→ Github
#あとがき
以上が、データーベースのidを取得したデータベースの表示でした。
idを取得して、URLやデーターベースの内容を出力できるのは非常にありがたいと思います。
工夫をしたら、多くの場面で活用できると思います。
ここまで、お読みいただきありがとうございました。
#参考リンク
書籍: たのしいRuby 第6版
#私のリンク
また、Twitter・ポートフォリオのリンクがありますので、気になった方は
ぜひ繋がってください。プログラミング学習を共有できるフレンドが出来るととても嬉しいです。