0
나는 cancancan 객체에 필드를 사용자 정의하려고 다음에 물건의없이,Cancancan 필드 선택
projectsAPI = Project.accessible_by(current_ability).select('projects.name, projects.price * 5 as new_price')
respond_to do |format|
format.json { render :json => {
:project_data => projectsAPI
}
}
나는 API 결과를 확인하면 문제는, 그냥 모든 프로젝트 필드를 반환 .select
성명.
로그를 확인할 때 쿼리에 사용자 지정 필드가 있지만 프로젝트의 나머지 필드도 있습니다.
json API에서 cancancan 객체를 반환 할 때 어떻게 필드를 사용자 정의 할 수 있습니까?
여전히 하위 쿼리의 모든 필드를 선택하기 때문에 오류가 렌더링됩니다. 'Project.accessible_by (current_ability) .select (: id) .to_sql'을 로깅하면 SELECT "프로젝트", "프로젝트", "프로젝트", "id"AS t0_r0, "프로젝트", "이름"'이 렌더링됩니다. .. 기본적으로'.select (: id)'는 객체의 id를 선택한 다음 객체의 모든 필드를 선택합니다. – HoosierCoder
하위 쿼리에서 .pluck (: id)을 사용하여 작업하도록 제안을 얻을 수있었습니다. 그러나 하위 쿼리는 오른쪽 열을 선택할 수있는 것보다 효율적이지 않습니다. 활성 레코드에서 사용자 정의 필드를 가져 오는'.select' 외에 다른 방법이 있습니까? – HoosierCoder
나는 뽑기를하지 않을 것입니다. 왜냐하면 먼저 분리 된 모든 ID를 추출 할 것이고, 많은 ID가 반환되면 실패 할 수 있기 때문입니다. CanCan이 더 많은 필드를 선택하는 이유는'.left_joins (...) '대신'.includes (...). references (...)'를 사용한다는 것입니다. 조인 캐시가 include와 공유되지 않으므로 .left_joins (...)를 수행 할 수 없습니다. 저는 CanCanCan과 Rails에 두 가지 문제가 있다고 생각합니다. 내가 찾으면 내 의견을 업데이트 할 것입니다. – kaspernj