0
0

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 3 years have passed since last update.

Railsチュートリアルメモ - 第14章

Posted at

メモの目次記事はこちら

公式Railsチュートリアル第14章へのリンク

サマリ

  • モデルの複雑な関連付けの方法
    • 1つのテーブルrelationshipを使って、followerfollowingを管理する方法
  • ネストしたルーティングの実装
  • ajaxの実装

ポイント

テーブル名と異なるカラムをFKとして使用したい場合

1対多の1側

  # user.rb
  has_many :active_relationships, class_name:  "Relationship",
                                  foreign_key: "follower_id",
                                  dependent:   :destroy

1対多の多側

  # relationship.rb
  # follower_idカラムが存在している必要がある
  belongs_to :follower, class_name: "User"

has_manybelongs_toについて

has_manyで指定できるパターン

  # モデルの複数形 e.g. microposts
  has_many :microposts
  # 別名のシンボル、クラス名、FK
  has_many :active_relationships, class_name:  "Relationship",
                                  foreign_key: "follower_id"
  • 関連付けとは別に、has_many :hoge, through: :fuga, source: :foobarを定義しておくと、こ配列``

belongs_toで指定できるパターン

デフォルトでは外部キーの名前を_idといったパターンとして理解し、 に当たる部分からクラス名を推測する

  1. モデルのシンボル
  2. 別名とクラス名
class Relationship < ApplicationRecord
  belongs_to :follower, class_name: "User"
  belongs_to :followed, class_name: "User"
end

ルーティングのカスタマイズ - ネストしたURLの設定

  # /users/1/following や /users/1/followers 
  resources :users do
    member do
      get :following, :followers
    end
  end

  # /users/tigers
 resources :users do
    collection do
      get :tigers
    end
  end

Ajaxの実装方法

  • ローカル変数ではなくインスタンス変数への変更が必要
  • viewにはform_forの引数に, remote: trueを追加する
  • controllerにはrespond_toを追加する
  def create
    @user = User.find(params[:followed_id])
    current_user.follow(@user)
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
  end

アンパサンド(&)を使ったブロックの短縮表記

# 以下は同値
[1, 2, 3, 4].map { |i| i.to_s }

[1, 2, 3, 4].map(&:to_s)

感想

  • めちゃくちゃ時間がかかったがなんとか完走することができた
  • チュートリアルとはいえtwitter風の動くアプリが完成したのは嬉しい
  • まだまだ理解しきったといえる状態ではないので、3周目4週目をやりながら使いこなしていきたい
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?