2014-09-18 5 views
1

포도와 함께 할 수있는 방법이 있습니까 & 데이터를 엔티티로 자동 직렬화하려면 Grape-Entity가 필요합니까? [: VAR (에서 : https://github.com/intridea/grape) 모든 예제는 PARAMS 사용하는 것 같다 게시/게시시 포도 엔티티로 직렬화

desc "Create a status." 
params do 
    requires :status, type: String, desc: "Your status." 
end 
post do 
    authenticate! 
    Status.create!({ 
    user: current_user, 
    text: params[:status] 
    }) 
end 

게시 된 개체는 더 복잡하다

은 (새로운 사람 (이름, 성, 주소 등)를 말할 수를 있나요 ??? 방법이 자동으로이 같은 사용의 어떤 종류를 찾고 API가 나타내는 엔티티로 변신 가지고 : 그렇다면, 어쩌면 MyModel.new(params) 또는 더 나은

post do 
    authenticate! 
    entity.first_name 
    entity.last_name 
end 
+0

결과적으로 허용 된 매개 변수에 대해 엔티티의 유일한 속성을 만들 수 있습니까? – Prescott

답변

0

당신의 엔티티 액티브 모델입니다 만 허용 할 수 있습니다 다음과 같이 선언 된 매개 변수 : MyModel.new(declared(params))the doc here 참조

Ruby는 메타 프로그래밍과 같은 많은 힘을 가지고 있으며, params을 반복 할 수있는 메타 프로그래밍과 같은 기능을 통해 자신이 원하는 것을 덜 고통스럽게 수행하고 엔티티의 필드를 설정할 수 있습니다. 그러나, 당신이하고 싶은 것은 실제로 복잡하기 때문에 일반적인 용도로 사용할 수 없습니다. 엔티티에 깊숙이 포함 된 연관성이 있다고 가정 해보십시오. 일반적인 권장 사항은 API를 통해 제공되는 것 (그리고 무엇을 돌려 주는지)이 사물 자체가 아니라 물건의 표현이라는 사실을 받아들이는 것입니다. 다음에 전달되는 항목이 이미 개의 항목을 나타내면 그 항목을 하나의 ID로 나타낼 수 있습니까? API가 ID를 얻는다면, 당신은 단지 그것을 보게됩니다. 이것은 Sidekiq과 같은 것을 사용할 때 주어진 조언입니다. 나중에 데이터베이스의 일부 데이터를 처리하려는 경우 모든 데이터 자체가 아닌 데이터베이스 레코드의 ID를 캡처합니다. 그 동안 데이터가 변경되는 경우 장점이 있지만, 여기에서 요점은 API가로드 할 수있는 포인터에 대한 포인터를 수락하면 도움이된다는 점입니다.

엔티티가 복잡한 경우 사용자가 원하는 것이 가장 바람직한 사용 사례라고 할 수 있습니다. 엔티티를 덜 복잡하게 만드는 것을 고려하십시오. 나는 당신이 원하는 것을 역의 종류 생각하지만 당신은 내가 생각하기 때문에 (내가 나 자신을 사용하지 않은, grape-entity에서 살펴 봐야 할 수 있습니다, 그리고 문서 ISN : 스트레칭으로


높은 수준의 목적에 대해 나에게 분명히 말하지 않음) 에 대한 엔티티와의 작업을 의미합니다.