2012-07-12 2 views
0

첫째, 몇 가지 배경 :중첩 된 오류를 내 REST API로 가져 오는 방법은 무엇입니까?

은 내가 Company 모델하는 Project 모델과 Task 모델을 가지고있다. 프로젝트는 한 회사에 속하고 작업은 프로젝트에 속합니다.

Project 모델에는 여러 속성이 있습니다 (company_id, date). 이러한 속성은 프로젝트를 고유하게 식별합니다.

사용자는 프로젝트를 식별하는 데 필요한 세부 정보가 포함 된 URL로 게시하여 API로 작업을 생성 할 수 있습니다. 예를 들어 사용자의 삶을 더 쉽게하기 위해서

POST /projects/<comnpany_name>/<date>/tasks/ 

은, 경우에 주어진 세부 프로젝트가 없습니다

, 나는 다음에 주어진 세부 사항에 의해 즉석에서 프로젝트를 생성하고 싶습니다 작업을 생성하고 프로젝트에 할당하십시오.

... 그리고 내 문제는 다음과 같습니다

오류 메시지를 반환하고 통신 할 수있는 올바른 방법이 무엇인지의이 회사 이름이 유효하지 않음을 가정 해 봅시다, 프로젝트를 생성 할 수있는 문제가있을 때 사용자에게?

내가 무엇을 의미하는지 설명 할 것이다 : 나는 Projectcreate_by_name_and_company_name 방법 추가 :

def self.create_by_name_and_company_name(name, company_name) 
    if company = Company.find_by_name(company_name) 
     project = Project.create(company_id: company.id, 
           name: name)  
    else # cannot create this project, trying to communicate the error 
     project = Project.new(name: name) 
     project.errors.add(:company, 'must have a valid name') 
    end 
    company 
    end 

내가 기대했다가 그 설정 오류, 저장되지 않은 회사 객체를 반환하여하는 것은 좋은 방법은 의사 소통이 될 것입니다 오류 (이것은 유효성 검사 오류가있을 때 레일즈가 작동하는 것과 유사합니다).

문제는 회사 개체에서 valid?을 호출하면 내가 쓴 오류를 제거하고 정기적 인 유효성 검사 오류 (이 경우 회사는 비워 둘 수 없음)를 추가한다는 것입니다.

그리고 보너스 질문

...

그리고 개념적인 문제뿐만 아니라이 : 나는 실제 속성을 만드는 데 사용되는 매개 변수를 제공하여 모델을 만드는거야 때문에, 그들은하지 않습니다 항상 errors [: attr] 해시에 잘 맵핑됩니다. 이 경우에는 그렇게 나쁘지 않고 회사 필드를 company name 매개 변수로 사용하고 있습니다. 그러나 작성 방법에 제공된 매개 변수가 모델 속성과 유사하지 않은 경우이 작업이 복잡해질 수 있습니다.

그렇다면이 문제를 해결하기위한 가장 좋은 방법은 무엇입니까? 근본적으로 잘못된 접근법이 있습니까? 그렇다면 선호되는 접근 방식은 무엇입니까?

답변

0

나는 그것이 같은 중첩을 방지하고 얕은 API에 충실하는 것이 가장 좋습니다 그 수치.

1

기본 레일 유효성 검사 오류 메시지를 무시 정보, 당신은 다음과 같이 유효성 검사 제약 조건을 작성해야합니다 :

validates_presence_of :name, :message => "must be a valid name" 
관련 문제