2014-11-26 3 views
0

남자! 나는 올바른 아키텍처 결정을 내리고있다.Ruby On Rail의 일부 모델을로드

기본적으로 다른 사용자의 일부 필드는 내 사이트 사용자에게 숨겨야한다. 그래서 내가 좋아하는,에서 모든 필드를로드 할 할 뷰의 필드를 필터링 귀찮게하지 : 필드의 나머지는 특별한 경우를 명시 적으로로드해야

default_scope -> { select(column_names - FILTERED_PARAMS) } 

.

문제는 일단 코드가 누락 된 필드를 참조하면 nomethod 오류가 나타납니다. 나는이 분야를 메타 프로그램했지만 그다지 효과가 없었습니다. 이 접근법은 AR 객체 라이프 사이클에 맞지 않는 것으로 보인다.

어떤 패턴을 선택한 경우 이러한 기능을 구현 한 적이 있습니까?

답변

0

내 경험에 비추어 볼 때, 최선의 결정은 select를 사용하여 쿼리에서 이러한 매개 변수를 필터링하지 않고 사용자에게 실제로 어떤 매개 변수가 보내지는지 필터링하는 것입니다. my_model.as_json (주어진 param 필터링 옵션 사용)은이를위한 간단한 해결책이지만 더 고급 사용을 위해서는 Rabl gem에게 조언을 해줄 것입니다 https://github.com/nesquena/rabl 이렇게하면 고급 모델의 경우에도 어떤 파라미터가 반환되는지 더 잘 제어 할 수 있습니다. 뷰 - 컨트롤러 방식.

+0

고맙습니다! 결정은 매우 복잡한 인증 정책과 다양한 역할을위한 변형 된 필드 액세스에 의해 결정되었습니다. html 외에도 레일즈 서버는 JSON 끝점에도 서비스를 제공합니다. 그래서 뷰 ​​레벨 필터를 엉망으로 만들고 싶지 않고 쉬운 솔루션을 얻으려고 노력했습니다. –

+0

그렇다면 일반적으로 선택에 대해 입력 변수로 배열을 사용한다고 생각하지 않습니다. -> {select (* (allowed_params - notallowed_params))}와 같은 것이 필요할 것입니다. –