2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsのメソッドや関連知識

Last updated at Posted at 2019-03-28

はじめに

メモ用

一旦メモして保存、記事にできるような具体的に実装に伴いデーターを以降。まとめていく。

ビュー周り

ページネーションした時に使用する

ページネーションとは長い文章を複数のページに分割して、
各ページへのリンクを並べアクセスしやすくすること。

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を作るときに使う(検索フォームなど)
→検索は別にモデルに編集やインスタンスの追加をする必要はない

viewファイルで設定
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 %>

スクリーンショット 2019-05-08 16.20.05.png

form_for内で使うメソッドは、f.htmlタグ名 :カラム名の形で指定します。

他にも色々ある。公式リンク

link_toメソッドの使い方

この形が通常型。その名の通り、ページのリンクを貼り付けたいヘッダーでよく使う。
ルートはgetをデフォルトで読み込む。

viewファイルで設定
 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 :検証するカラム,{検証する内容}
バリデーションで指定する制限の間に[,]をつける事で複数指定できる

●空の投稿を防ぐバリデーション

app-modelの中にある
validates :text, :image, presence: true #カラムを指定

●文字制限をつけるバリデーション

app-modelの中にある
validates :検証するカラム,{length: {maximum: 140}}

●重複がないかチェックするバリデーション

app-modelの中にある
validates :検証するカラム,{uniqueness: true}

flashとは

ページ上に1度だけ表示されるメッセージ。
アクションで設定

app-modelの中にある
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]}%")
スクリーンショット 2019-05-08 16.17.16.png スクリーンショット 2019-05-08 16.17.22.png

before_actionとは

全アクションで共通する処理がある場合。アクションが呼び出される際に必ずbefore_actionの処理が実行されます。
全アクションで共通する処理を1箇所にまとめる事ができる

application_controller
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
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?