2016-09-02 3 views
0

비슷한 질문이 이미 제기 된 경우 미안합니다. 동일한 내용을 찾을 수 없습니다.before_save가 나쁜 것으로 간주되는 이유는 무엇입니까?

따라서 누군가가 왜 before_save 조건부 사람이 나쁜 것으로 간주 될 수 있는지 말해 줄 수 있습니까? 유효성 검사가 때로는 매우 잘 맞는 이유

before_save :something, if: Proc.new { self.abc == 'hello' } 

따라서 이해하지만 내가 이해하지 못하는 것은 어떤 사람들은 그 콜백을 사용하는 나쁜 일이 될하기 위해 할 수있는 생각하는 이유이며, 그들이 만들어 결코만을 검증을 쓰기 없지만하도록 강요 그들 조건부.

나는 개인적으로 이러한 변화는 이미 기존 항목에 영향을 미칠 수 있기 때문에 훨씬 더 큰 문제가 될 수있을 것으로 생각하고 그래서 조건 검증을 구현하기 위해 또는 특정 경우에 데이터를 수정하려는 경우 before_save에 대한 if을 제공하기 위해 괜찮습니다. 왜 어떤 사람들은 그것이 좋지 않다고 생각하니? 누군가가 저를 도울 수 있습니까?

대단히 감사합니다!

답변

1

나는 그것을 이해하고 제대로 만 후 신중하게 같은 콜백 정말 사용 글로벌 지혜를 의미하는 것으로 심의를 사용하는 것을

  • 를 사용하지 않을 때 before_save 또는 before_validation의 유일한 단점이라고 생각 모든 레코드에 대해 (이미 DB에 저장된 이전 레코드도 고려하십시오)
  • 콜백이 특정 레코드 또는 조건에만 적용 가능한 경우 모델을 오염시키지 않고 외부 로직을 구현하는 것이 좋습니다 모델.
  • 콜백이 상태를 변경하는 경우 레코드 또는 다른 레코드 일 수 있습니다. 콜백의 이름은 명시 적으로 나타내야하며 개발자는 부주의 한 영향을 미치지 않아야 함을 알고 있어야합니다.
  • 콜백이 상태를 변경하지 않으면 불변성과 멱등수를 보장하므로 즉시 사용하는 것이 안전합니다.
  • 콜백의 순서가 중요하고 어떤 일이 발생했는지에 대한 제한된 이해는 개발자/새 개발자가 실수로 코드를 작성하고 항상 작동하지 않을 수 있음을 의미합니다.
  • before_savebefore_validation이 다른, 그리고 개발자해야 다음에서 제외 before_validation

같은 일부 콜백이 before_save, 일부로서 사용하기위한 것입니다 것을 이해하는 것이, 나는 before_save에 문제가 표시되지 않습니다 잠재적으로 코드의 논리를 정리하고 분해 할 수 있고 특히 모델의 하위 클래스가있는 경우 재사용이 가능하기 때문입니다.

문제에 그냥 내 즉각적인 생각

...

0

사용하여 콜백은 표준 레일 연습이다! 적절하게 사용되면 데이터 무결성을 유지할 때 훌륭한 DRY 도우미가됩니다. 콜백은 데이터 형식 지정 사용자 입력 (예 : 휴대폰 번호 필드에서 공백이나 대시 제거)에 사용되며 유효성 검사를 통해 오류가 발생하여 응답하면 사용자를 좌절시킬 수 있습니다. 유효성 검사를 사용하여 예측할 수없는 사례 또는 예측할 수없는 데이터 및 콜백 (예 : 저장하기 전에 이메일 다운 케 이싱)을 처리합니다.

관련 문제