はじめに
メモ用
一旦メモして保存、記事にできるような具体的に実装に伴いデーターを以降。まとめていく。
ビュー周り
ページネーションした時に使用する
ページネーションとは長い文章を複数のページに分割して、
各ページへのリンクを並べアクセスしやすくすること。
gem 'kaminari'
bundle install
kaminari:pageメソッド
kaminari:perメソッド
kaminari:paginateメソッド
ページネーションのリンクを表示したい時に使う
@hoges = Hoge.page(params[:page]).per(5)
### ビューファイルで使用する
<%=paginate(@hoges) %>コントローラで定義した変数をあてる
renderメソッド
アクションを経由せずに、直接ビューを表示
。
renderメソッドにpartialオプションをつけることで、呼び出す部分テンプレートを指定できます。今回の場合、partialオプションには"tweet"が指定されています。
また、localsというオプションを用いると部分テンプレート内でその変数を使えるようになります。
render partial: "ranking/ranking", locals: { product: product}
form_tagメソッド
モデルに基づかないformを作るときに使う(検索フォームなど)
→検索は別にモデルに編集やインスタンスの追加をする必要はない
form_tag("飛ばすURL") do
end
form_forメソッド
モデルに紐づいたフォームを作るときに使用する(特定の「モデル」を編集・追加するためのフォームを生成するヘルパーメソッド)
CRUD処理を実装するときは確実にform_forを利用すると考えてもいいくらいらしい。
特定のテーブルにレコード(モデルクラスのインスタンス)だけを新規作成、更新するときに利用する。
■form_for: 任意のモデルに基づいたformを作るときに使う(投稿フォームなど)
→フォームに入力した情報をモデルを通じて、テーブルに追加・編集する
<%= form_for @user, url: "/users/", html{method: :post} do |f| %>
<%= from_for モデルオブジェクト, url:"/飛ばすURL/", html{method: :何でひろうか} do |f| %>
…
<% end %>

form_for内で使うメソッドは、f.htmlタグ名 :カラム名の形で指定します。
他にも色々ある。公式リンク
link_toメソッドの使い方
この形が通常型。その名の通り、ページのリンクを貼り付けたいヘッダーでよく使う。
ルートはgetをデフォルトで読み込む。
link_to '表示したい文字', "URL" , method: :hirou, date: {cofirm:"mozi"}
モデル周り
よく使うデーター型と区分け
種類 | 意味 |
---|---|
①text | = 文字列 |
②string | = 短い文字列 |
③integer | = 整数(使い方調べ中) |
④float | = 浮動小数 |
⑤decimal | = 精度の高い小数 |
⑥datetime | = 日時 |
⑦timestamp | = より細かい日時 |
⑧time | = 時間 |
⑨date | = 日付 |
⑩binary | = バイナリデータ |
11boolean | = Boolean型 |
12references | = 外部キーカラムに指定する |
制約の種類
主キー制約
種類 | 意味 | 種類 |
---|---|---|
null: false | 空だと弾かれる | NOT NULL制約 |
foreign_key: true | 外部キーのidが正しくないとだめ | 外部キー制約 |
unique: true | 重複したカラムの投稿を制限 | 一意性規約 |
制約の一例
t.string :name, null: false, unique: true, index: true
中間テーブルの設定
class num1 < ActiveRecord::Base
has_many :num1_num2
has_many :num2, through: :num1_num2
end
class num2 < ActiveRecord::Base
has_many :num1_num2
has_many :num1, through: :num1_num2
end
# 中間テーブル
class Num1Num2 < ActiveRecord::Base
belongs_to :num1
belongs_to :num2
end
多対多の関係を構築した事によって使えるメソッド
理解してから追加していく
リレーション
ここも追加してみる
validate登録
不正なデーターがデータベースに保存されないようにチェックする仕組み。
基本の形 validates :検証するカラム,{検証する内容}
バリデーションで指定する制限の間に[,]をつける事で複数指定できる
●空の投稿を防ぐバリデーション
validates :text, :image, presence: true #カラムを指定
●文字制限をつけるバリデーション
validates :検証するカラム,{length: {maximum: 140}}
●重複がないかチェックするバリデーション
validates :検証するカラム,{uniqueness: true}
flashとは
ページ上に1度だけ表示されるメッセージ。
アクションで設定
def hoge
flash[:notice] = "表示したい文字"
end
アソシエーション
ブログに書いたまとめ
https://blog.hatena.ne.jp/yujiro0320/yujiro-engineer.hatenablog.com/edit?entry=17680117127104730382
コントローラーで使用するメソッド
requireメソッドとpermitメソッド
.requireメソッドがデータのオブジェクト名を定め、
.permitメソッドで変更を加えられる(保存の処理ができる)キーを指定。
def create_params
params.require(:review).permit(:name, :rate).merge(product_id: params[:product_id])
end
end
参考ーhttps://qiita.com/morikuma709/items/2dc20d922409ae7ce216
テーブルデーターの並びかえについて
データベースにある指定したモデルから全てのデーターを対象に
created_atを基準としてdesc(降順)に抽出する。
逆はasc(昇順)となる。エクセルの関数でも出るよね。ASC関数とか。
Model.all.order("created_at desc")
特定のカラムの値から1つのデータを取得したい
指定した<:id> にある特定のデータを受け取る。
※id = データーベースに保存した順の番号
Model.find_by(id: params[:id])
whereメソッド
カラムの値の文字列を全て探す
あるユーザーが投稿した内容を取り出すなどで使う。
モデルクラス名.where('検索するカラム名 LIKE(?)', "検索するキーワード")
@products = Product.where('title LIKE(?)', "%#{params[:keyword]}%")


before_actionとは
全アクションで共通する処理がある場合。アクションが呼び出される際に必ずbefore_actionの処理が実行されます。
全アクションで共通する処理を1箇所にまとめる事ができる
before_action :set_current_user
def set_current_user
@current_user = User.find_by(id: session[:user_id])
end
redirect_to("/URL")
ビューを作らない時に使用する。アクション実行後
指定のビューに飛ばすので、ビューがなくてもエラーにならない。
@user = User.new(name: params[:name],email: params[:email])
@user.save
redirect_to("/users/#{@user.id}")
こんな形もある。
redirect_to root_path unless user_signed_in?
redirect_to controller: :products, action: :index