条件付きレール


最後の数週間、Ruby on Railsを学んでいる間、私の最も一般的な検索の1つはSerializerでした.私が遭遇した問題は、ほとんどの場合、シリアライザーをモデル内の1つのアクションだけで使用しようとしていました.
ここでは、私が遭遇した問題とどのように解決したかを示す例です.私が働いていたモデルはエピソードでした、そして、私が取り組んでいた2つの行動は、ショーとインデックスでした.私はすべてのエピソードをインデックスのアクションと一緒に自分の属性と一緒に表示していた.そして、私はショーアクションでエピソードだけを表示することを見ていました、また、そのエピソードに関連する入れ子になったゲスト情報で.シリアライザーをショーアクションで利用しようとすると、インデックスのアクションにも影響しました.
これを回避するために、私はシリアライザでフラグを使用しました.シリアライザーのフラグを使用してシリアライザーを適用する必要がないアクションにシリアライザーを制限することができます.以下は私のシリアライザーと私のコントローラのコードです.
class EpisodeSerializer < ActiveModel::Serializer
  attributes :id, :date, :number

  has_many :guests, if: :condition

  def condition
    @instance_options[:flag] != "restrict"
  end

end
class EpisodesController < ApplicationController

    def index 
        @episode = Episode.all
        render json: @episode, flag: "restrict", status: :ok
    end


    def show 
        episode = Episode.find(params[:id])
        render json: episode, serializers: EpisodeSerializer, status: :ok
    end
end
以下はインデックスアクションのレスポンスです.
[
    {
        "id": 1,
        "date": "1/11/99",
        "number": 1
    },
    {
        "id": 2,
        "date": "1/12/99",
        "number": 2
    },
......
エピソードシリアライザーの結果として、ネストされたゲストデータとの1つのエピソードに対するショーアクションの応答です
{
    "id": 1,
    "date": "1/11/99",
    "number": 1,
    "guests": [
        {
            "id": 1,
            "name": "Michael J. Fox",
            "occupation": "actor"
        }
    ]
}
これは私の最初のブログ記事であり、私はレールに新しいので、任意の提案がある場合は、以下のコメントを残して自由に感じてください!