첫째, 몇 가지 배경 :중첩 된 오류를 내 REST API로 가져 오는 방법은 무엇입니까?
은 내가 Company
모델하는 Project
모델과 Task
모델을 가지고있다. 프로젝트는 한 회사에 속하고 작업은 프로젝트에 속합니다.
Project
모델에는 여러 속성이 있습니다 (company_id, date
). 이러한 속성은 프로젝트를 고유하게 식별합니다.
사용자는 프로젝트를 식별하는 데 필요한 세부 정보가 포함 된 URL로 게시하여 API로 작업을 생성 할 수 있습니다. 예를 들어 사용자의 삶을 더 쉽게하기 위해서
POST /projects/<comnpany_name>/<date>/tasks/
은, 경우에 주어진 세부 프로젝트가 없습니다
, 나는 다음에 주어진 세부 사항에 의해 즉석에서 프로젝트를 생성하고 싶습니다 작업을 생성하고 프로젝트에 할당하십시오.... 그리고 내 문제는 다음과 같습니다
오류 메시지를 반환하고 통신 할 수있는 올바른 방법이 무엇인지의이 회사 이름이 유효하지 않음을 가정 해 봅시다, 프로젝트를 생성 할 수있는 문제가있을 때 사용자에게?
내가 무엇을 의미하는지 설명 할 것이다 : 나는 Project
에 create_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
매개 변수로 사용하고 있습니다. 그러나 작성 방법에 제공된 매개 변수가 모델 속성과 유사하지 않은 경우이 작업이 복잡해질 수 있습니다.
그렇다면이 문제를 해결하기위한 가장 좋은 방법은 무엇입니까? 근본적으로 잘못된 접근법이 있습니까? 그렇다면 선호되는 접근 방식은 무엇입니까?