Tayatter

タヤのつぶやき

RubyonRails:検証ツール"validates"他 #Progate #RubyonRails5 V

・validates 検証ツール
 Postモデル内に記述
 文法:
 validates :content, {presence: true}
 validates :content, {length: {maximum: 140}}

・if文を使って、成功時と失敗時のアクションを分ける。分岐。
・redirect_to とrenderの違い
 redirect_to:HTTPリクエストをサーバーに送り、HTMLをgetする
       自サーバー送信時は、routeに繋がる。
 render:Action 内で使用。view単体を呼び出すのに使う。
 render記述式 render("フォルダ名/ビュー名(拡張子省略)")

・エラーメッセージについて
 rubyのエラー表記:変数.errors.full_messages
 変数に対してエラー、フルメッセージアクションすることでエラー表記が可能。

flashメソッド
 中に入れたものを一瞬実行する。

<ページ作成>

新規投稿ページ
・validatesを満たさない時、画面を戻しエラーメッセージを表示させる
・validatesを満たさない時、画面を戻し同時に直前の内容を表示する

手順
(省略:画面を戻す)
post.saveが失敗した時、エラーメッセージを表示する式を書く
post.saveが失敗した時、直前の内容を表示する式を書く

結果
・エラーメッセージの表示式を書く◯
・直前の内容を表示する式を書く◯
  (※ミスポイント:@postに代入したが、textarea内に表示するのを忘れた)
以下、プラス必要な手順
・この状態だとnewルートにアクセスした際@postが空のためエラーになる。
 →newアクションに@postを定義

RubyonRails:投稿の編集・削除機能実装 #Progate #RubyonRails5 IV

投稿の編集・削除機能の実装

 

流れの仮説を立てる
A.編集機能、ページ作成
・編集ページ作成
 開いたらテキストエリアに現在のcontentが入る
・投稿ボタンでデータを編集アクションに渡す
・アクション内で前の値呼び出し→新しい値を格納andセーブ
・ルートは個別投稿ページへ。

B.削除機能の実装
・削除ボタン→削除アクションにデータを渡す
・削除アクション内で値を更新(デリートメソッドみたいなの)
・ルートは投稿一覧ページ。

<補足>データベースの更新
 データ読み出し→更新→保存
 post = Post.find_by(id: ?)
 post.content = "新しい文章"
 post.save

<補足2>レコードの消し方
 データ呼び出し→削除
 post = Post.find_by(id: ?)
 post.destroy


editアクションで、URLのidと同じidの投稿データをデータベースから取得し、そのcontentの値(=投稿の内容)を初期値に設定する。
def edit
@post = Post.find_by(id: params[:id])
end
<textarea><%= @post.content %></textarea>

  ※ #{@post.content}はrubyファイル内で使う。

 

全体の流れ
・投稿編集ページ作成(showビューにリンク挿入)
・フォーム作成
  フォームの初期値を現在の投稿内容に
・受け取り、更新機能作成
 updateアクションを用意(ルートも。リダイレクトするためビューは不要)
 編集完了ボタンの送信先をupdateアクションに設定
 <%= form_tag("/posts/#{@post.id}/update) do %><% end %>
 ・updateアクションの中身を作成
   def update
    redirect_to("/posts/index")
    @post = Post.find_by(id: params[:id])
    @post.content = params[:content]
    @post.save
   end
 ・textareaにname属性を付与

 

・投稿削除機能作成

 destroyアクション、ルート

 showビュー内にリンクを作成 link_to() 、転送方法の指定{method: "post"}

 destroyアクションの定義

 def destroy

  @post = Post.find_by(id: params[:id])

  @post.destroy

  redirect_to(...)

 end

Rails:新規投稿ページの作成から投稿プラグラムまで

投稿一覧と個別投稿ページをリンクさせる。
link_toの使い方
<%= link_to("テキスト", "リンク") %>
・テキスト=post.content
・リンク="posts/#{post.id}"

新規投稿ページの作成
1. 入力フォーム、投稿ボタンづくり
<textarea>と<input type="submit">

inputタグについて
 ...中身のデータ名と値を指定されたサーバーに指定された方法で送られる(getとかpostとか。 詳しく調べる)
2. 投稿ボタンで送信する機能を付与
・結果を受け取るアクション posts#createを作る
・ルート(post "posts/create" => posts#create)
・アクション作成
・form_tagを使って送信機能を付与
 <%= form_tag("送信先URL") do %>(=がないと中身消える)
<% end %>

・投稿ボタンでposts/createに繋げ、posts#createアクション起動
・createアクションで他URLに転送
 redirect_to("転送先URL")

データを保存
1. 投稿したものをcreateアクションで受け取る機能
 ・textareaにname属性を付与(今回引数は"content")
 ・createアクションにて、params[:content]で送信値を受け取って格納。
  paramsは(name属性に設定した)
  文字列をキーとしたハッシュになっています。とのこと。Rubyのハッシュ参照

2. データベースで保存する 
 def create内
 ・@post = Post.new(content: params[:content])
 ・@post.save

paramsは2通りの使い方がある
①“「: "リンク名"」を使ったルーティングのURL”から値を取得する
②”「name="データ名"」が付いたフォーム”の入力内容を受け取る

投稿データの並べ替え
・データ取得時に並び替える
・Post.all.order("項目": :asc/:desc)

Rails:“投稿機能をもつWebページ”を作成する

【目標:“投稿機能をもつウェブページ”の作成】
・作るもの① レコードごとの個別投稿ページの作成

(※復習:Railsにおける新規ページ(htmlファイル)作成の手順
  ルート設定 → アクション作成 → ビュー作成)

 ここでやりたいこと:
 "localhost:3000/posts/" + id(1, 2, 3, ... , n) 
 のURLにアクセスしたとき、idに対応した投稿ページを表示すること

 【個別投稿ページの作成】

 日本語 訳)
 STEP1)1つのidに対し1つのルートを作成【ルート設定】
STEP2)URLからidを取得する式、
     取得idのレコードを変数に格納する式
     を作成【アクション作成】
 STEP3)レコード入り変数のデータをHTML内に表示【ビュー作成】

 Ruby語 訳)
 (場所:routes.rb)
 get "posts/:id" => "posts#show"

 (場所:posts_controller.rb)
 @post = Post.find_by(id:params[:id])

 (場所:show.html.erb)
 <%= @post.content %>

Rails:HTML(.erb)の使い方 入門 #Progate

RailsのHTMLでは"application.html.erb"ファイルに

 各ページの共通項をまとめられる。(各HTMLのヘッダー等。)


・application.html.erb
 コード"<%= yield %>"
 の中に他のHTMLファイルが挿入され、表示される

・ERBでリンクを作成:link_toメソッド
<% link_to("About", "/about") %>
= <a href="/about">About</a>

Rails勉強中:データベースの使い方2 #Progate

データベース:まとまったデータの使い方
・テーブルの全レコードを取得して変数に代入
 posts = Post.all
 →変数postsの中にレコードが配列で保存される。

 実験:全レコードから特定のレコードを取り出す
 Ex) Post.all[0] … Postの全レコードの0番目のレコードを取得して表示
   Post.all[0].content ... Postの全レコードの0番目のcontent部分を取得して表示

※モデル"model"とは:ApplicationRecordを継承したクラスのこと。

テーブルのレコード(content部分)をHTML"投稿ページ"に一覧表示する。
 1.コントローラの編集
 2.ビューの編集

・コントローラの編集
 postsコントローラのindexアクション内にインスタンス変数をつくり、Postモデルの全レコードを代入する。

・ビューの編集
 ビュー>投稿一覧ページに
 埋め込みRubyの形(<% %>, <%= %>)で式を挿入。
(HTMLで先に型を作っておくとよい)

 <投稿を一覧表示する式>
@posts.each do |post|
(訳:@posts変数から一個取り出し、下記の式に従って変数postに代入して実行。これをレコードの数だけ繰り返す。)

※補足
@posts = ["レコード1", "レコード2", ..., "レコード?"]
 @posts[0] = "レコード1"
 @posts[1] = "レコード2"
 
データベースについて
・データベースは、railsアプリケーションフォルダ内のファイルには表示されない
 操作は全てターミナル"rails console"内で行う

 実験:postsテーブルに新しいレコードを追加してみる
・レコード作成方法おさらい
 rails console
 post3 = Post.new(content:"新しい投稿")
 
 saveメソッドで保存
 post3.save