Ruby on Rails Ⅲ

■ ターミナルで以下のコマンドを実行してください
rails console

■ コンソールで以下のコードを実行してください
post = Post.new(content: “Rails勉強中!”)
post.save

find_byメソッド
find_by
特定のidの投稿を取得するためには、find_byメソッドを用います。
find_byメソッドは、ある条件に合致するデータを取得することができます。
図のように、「モデル名.find_by(カラム名: 値)」とすることで、その値を持ったデータをデータベースから取得することができます。

URLにidを含めよう
ルーティング:id
ルーティングのURL部分に「:」を用いて「posts/:id」と指定することで、「/posts/1」でも「/posts/2」でもshowアクションにいくようにすることができます。
「posts/:id」と書くと「/posts/◯◯」のような全てのURLが該当します。

posts/:idの注意点
ルーティング:id
「posts/:id」というルーティングは「posts/index」より下に書かなければいけません。
ルーティングは合致するURLを上から順に探します。そのため「posts/index」よりも上に書くと、「localhost:3000/posts/index」というURLは「posts/:id」というルーティングに合致してしまいます。

get “posts/:id” => “posts#show”

def show
end

変数params
params
コントローラのアクション内では、ルーティングで設定したURLの「:id」の値を取得することができます。その値はparamsという変数にハッシュとして入っています。
params[:id]とすることで、その値を取得することができます。

def show
# 変数paramsから「:id」の値を取得し、変数@idに代入してください
@id = params [:id]
end


<%= "idが「#{@id}」の投稿詳細画面です" %>

投稿詳細ページを完成させよう
showアクションで変数@postを定義し、idカラムの値がparams[:id]と等しい投稿をデータベースから取得して代入します。
@postをshow.html.erbで表示することで、各URLに対応した投稿のデータが表示されるようにしましょう!

class PostsController < ApplicationController def index @posts = Post.all end def show # find_byを用いてpostsテーブルから「params[:id]」に対応するデータを取り出し、変数@postに代入してください @post = Post.find_by(id: params[:id]) end end


<%= @post.content %>


<%= @post.created_at %>

<%= link_to(post.content, "/posts/#{post.id}") %>

新規投稿ページの準備
新規投稿ページは、「localhost:3000/posts/new」というURLでアクセスできるようにしましょう。
そのためにルーティング、アクション、ビューを追加しましょう。
アクションは、newアクションとしましょう。

入力フォームを作成しよう
textareainput
HTML & CSSのレッスンで学習した


<% end %>

redirect_to
redirect_toリダイレクト
他のURLに転送(リダイレクト)するには、redirect_toメソッドを用います。
redirect_toは「redirect_to(URL)」とすることで、そのページに転送することができます。

def create
# redirect_toメソッドを用いて、自動的に投稿一覧ページに転送されるようにしてください
redirect_to(“/posts/index”)

name属性
name
今の状態のフォームでは、投稿ボタンを押しても入力した内容をcreateアクションに伝えることができません。

orderメソッド
order
orderメソッドを用いることで、投稿一覧を並び替えることができます。
order(カラム名: 並び替えの順序)のように使います。並び替えの順序には、昇順(:asc)と降順(:desc)のどちらかを指定できます。
created_atを基準に降順(:desc)に並べ替えると、新しいものから順番に表示するようにできます。

# Post.allにorderメソッドを用いて、新しい投稿が上から順に表示されるようにしてください
@posts = Post.all.order(created_at::desc)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする