직렬 변환기 재정의
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
메서드를 추가하는 것입니다.
Reference
이 문제에 관하여(직렬 변환기 재정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/swislokdev/overriding-serializer-7f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)