[Ruby on Rails5]Progate 学習メモ 2
引き続きメモ。とっ散らかっている内容は後でまとめます。
▼DBの内容を編集する
カラムの取得→値の上書き→保存
(update_atが更新される)
コンソールでの操作
変数 = テーブル名.find_by(id:xx)
変数.カラム名 = "値"
変数.save
実装するには下記のようにします。
投稿ページと編集ページが必要になるので追加します。
route.rbの記載は、
post "コントロール名/:id/アクション編集" => "コントロール名#アクション編集"
xxx_contoroller.rbの記載は、
def アクション投稿
@変数 = テーブル名.find_by(id: params[:id])
end
def アクション編集
@変数 = テーブル名.find_by(id: params[:id])
@変数.編集するカラム名 = テーブル名.new(編集するカラム名: params[:編集するカラム名])
@変数.save
redirect_to("コントロール名/アクション一覧")
end
xxx.html.erbの記載は、
<%= form_tag("コントロール名/#{@変数.id}/アクション編集") do %>
<textarea name="カラム名"><%= @変数.content %></textarea>
<input name="カラム" value="初期値">
<input type="submit" value="ボタン表示名">
<% end %>
※ユーザー名とメールアドレスのような1行の入力フォームの場合はtextarea タグではなくinputタグ(オプションなし)だけでよい。inputタグは閉じタグが不要。inputタグの初期値が必要な場合はvalueに記述する。ボタンの場合のvalueは表示名になる。
▼DBの内容を削除する
カラムの取得→値の削除(destroyメソッド)
コンソールでの操作
変数 = テーブル名.find_by(id:xx)
変数.destroy
実装するには下記のようにします。
route.rbの記載は、
post "コントロール名/:id/アクション削除" => "コントロール名#アクション削除"
※getはDBを変更しないアクション、postはDBを変更するアクション…と覚えればよい
xxx_contoroller.rbの記載は、
def アクション削除
@変数 = テーブル名.find_by(id: params[:id])
@変数.destroy
redirect_to("コントロール名/アクション一覧")
end
xxx.html.erbの記載は、
<%= link_to("表示名", "/コントロール名/#{@post.id}/アクション削除", {method: "変数"}) %>
※getで書かれているリンクを探してしまうので、postを探す書き方にする
▼投稿編集ページの設定
下記のURLにする前提とする
localhost:3000/コントロール名/id番号/アクション名
route.rbの記載は、
get "コントロール名/:id/アクション名" => "コントロール名#アクション名"
xxx_contoroller.rbの記載は、
def アクション名
@変数 = テーブル名.find_by(id: params[:id])
end
リンクの追加は、xxx.html.erbに記載
<%= link_to("表示名", "/コントロール名/#{@変数名.id}/アクション名") %>
▼バリデーション
不正なデータがデータベースに保存されないように、データをチェックする仕組みのことをバリデーションと言います。
バリデーションに引っかかった場合(不正なデータの場合)にはデータベースに保存されません。
バリデーションはモデルで設定します。
models/xxx.rbに記載します。
validates :検証するカラム, {検証内容}
複数のバリデーションを設定する場合は、カンマ区切りにする
validates :検証するカラム, {検証内容, 検証内容} ...
投稿に失敗したので、saveメソッドの挙動も制御する
▼空投稿を防止する
空投稿チェックの検証する場合は、models/xxx.rbに記載します。
validates :検証するカラム, {presence: true}
▼文字長を制限する
バリデーションでは、値が存在しているかだけでなく、文字数もチェックすることができます。models/xxx.rbに記載します。
validates :検証するカラム, {length: {maximum: 文字長}
▼値の重複がないかチェックする
バリデーションでは、値が存在しているかだけでなく、文字数もチェックすることができます。models/xxx.rbに記載します。
validates :検証するカラム, {uniqueness: true}
▼投稿の成功失敗で遷移先を変える
xxx.controller.rbに記載する
def 編集アクション
if @変数.save
redirect_to("成功パターンのURL")
else
render("失敗パターンのURL")
end
end
▼投稿失敗時に直前の投稿を表示させる
投稿失敗後に編集画面に遷移すると、編集画面はDBの情報を取得して表示させるので、編集前のテキストが表示されてしまう。
編集画面を経由せず、編集前のテキストが表示される。
xxx.controller.rbへの記載は、
def 編集アクション
@変数 = テーブル.find_by(id: params[:id])
@変数.カラム = params[:カラム]
if ...
...
else
render("新規アクションを指定")
end
※renderメソッド時のアクションの指定は頭「/」不要
def 新規アクション
@変数 = テーブル.new
end
xxx.html.erb(新規ビュー)
<%= @変数.errors.full_messages.each do |message| %>
<div class="form-error">
<%= message %>
</div>
<% end %>
<textarea><%= @変数.カラム %></textarea>
▼エラーメッセージを表示する(full_messagesメソッド)
xxx.html.erb
<%= @変数.errors.full_messages.each do |message| %>
<%= message %>
<% end %>
▼フラッシュ処理
ページ上に1度だけ表示されるメッセージをフラッシュといいます。
Railsではフラッシュを表示するために、特殊な変数flashが用意されています。アクションで変数flash[:notice]に文字列を代入すると、flash[:notice]をビューで使うことができます。
成功時にxxx.controller.rbへの記載は、
def 編集アクション
if 判定したい処理
flash[:notice] = "表示したい文字列"
...
end
end
xxx.html.erbへの記載は、
<% if flash[:notice] %>
<div class="flash">
<%= flash[:notice] %>
</div>
<% end %>
Author And Source
この問題について([Ruby on Rails5]Progate 学習メモ 2), 我々は、より多くの情報をここで見つけました https://qiita.com/hiro-gen/items/75952e71fa34db09614a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .