직렬 변환기 재정의

4340 단어 rubyrailsserializers

기본 직렬 변환기 설정



Rails 백엔드에서 활성 모델 직렬 변환기를 사용하는 동안 기본 직렬 변환기를 재정의하려면 새 직렬 변환기를 생성해야 합니다.

User 모델과 Recipe 모델을 사용하여 JSON 출력을 단순화하기 위해 표시되는 정보를 선택할 수 있습니다.

# Serializer for User
class UserSerializer < ActiveModel::Serializer
  attributes :id, :username
  has_many :recipes
end

# Serializer for Recipe
class RecipeSerializer < ActiveModel::Serializer
  attributes :id, :name, :ingredients, :instructions
  belongs_to :user
end



사용자#인덱스



설정users#index에서 사용자가 생성한 각 레시피의 모든 속성과 함께 사용자 ID 및 사용자 이름이 출력에 표시됩니다. 이 경우 레시피 ID, 이름, 재료 및 지침이 모두 표시됩니다.

가독성을 위해 출력을 변경하기 위해 몇 가지를 추가합니다.

# User serializer
class UserSerializer < ActiveModel::Serializer
  attributes :id, :username
  has_many :recipes, serializer: UserRecipeSerializer
end

# UserRecipeSerializer
class UserRecipeSerializer < ActiveModel::Serializer
  attributes :id, :name
end


이제 Recipe가 지정한 UserRecipeSerializer의 속성만 표시됩니다.

단점은 켜져 있습니다user#show. 이 직렬 변환기도 사용되며 원하는 경우 레시피의 전체 세부 정보를 표시하지 않습니다.

사용자#show


users#show 경로에서 컨트롤러 작업에는 전체 레시피 세부 정보를 표시하기 위한 목적으로 또 다른 직렬 변환기에 대한 추가 비트가 있습니다.

# UsersController
...

def show
  user = User.find_by_id(params[:id])
  if user
    # BEFORE SERIALIZER
    # render json: user

    #  AFTER SERIALIZER
    render json: { user: UserShowSerializer.new(user)}
  end
end

# UserShowSerializer 
class UserShowSerializer < ActiveModel::Serializer
  attributes :id, :username
  has_many :recipes
end


올바른 직렬 변환기를 표시하는 가장 안전한 방법은 필요한 정보가 표시되도록 컨트롤러 작업에서 각 렌더링 호출(필요하지 않음)에 대해 .new 메서드를 추가하는 것입니다.

좋은 웹페이지 즐겨찾기