ActiveRecord 모델에 링크 된 데이터베이스 뷰가 있습니다. 그것은 true
또는 false
로 1
또는 0
해석 아니에요데이터베이스 뷰의 필드를 부울 대신 정수로 처리하는 ActiveRecord 모델
[
[0] #<AdherenceActivity:0x007fec986b5328> {
:adherence_date => Wed, 01 Nov 2017,
:patient_id => 10000,
:morning => 0.0,
:afternoon => 1.0,
:evening => 1.0,
:night => nil
}
]
반환 AdherenceActivity.all
나는 모델을 호출 할 때. 어떻게 1.0
또는 0.0
대신 부울을 반환하도록 모델을 업데이트 할 수 있습니까?
대한 명확한
편집,이 데이터베이스 뷰가 아닌 테이블입니다. 이 아무런 응답이없는 것처럼 여기 DB보기 (오라클 SQL)에 대한 내 이전
class CreateAdherenceActivities < ActiveRecord::Migration[5.0]
def up
execute <<-SQL
CREATE VIEW adherence_activities AS
SELECT
adherence_date,
patient_id,
sum(case when scheduled_time = 'morning' then nvl2(acknowledged_at,1,0) end) as morning,
sum(case when scheduled_time = 'afternoon' then nvl2(acknowledged_at,1,0) end) as afternoon,
sum(case when scheduled_time = 'evening' then nvl2(acknowledged_at,1,0) end) as evening,
sum(case when scheduled_time = 'night' then nvl2(acknowledged_at,1,0) end) as night
FROM medication_adherences
GROUP BY adherence_date, patient_id
SQL
end
def down
execute "DROP VIEW adherence_activities"
end
end
레일 5.1, 루비 2.4.1
보기를 변경할 수 있습니까? 'sum'은 보통'numeric' 타입을 생성합니다. 따라서'1.0'과'0.0' 값을 생성합니다. 오라클 어댑터는 (MySQL과 같은) 부울에 대해 일종의 작은 정수를 사용합니까, 아니면 오라클에 기본 부울 유형이 있습니까? 기본적으로,'sum'을 boolean을 생성하는 무언가 (해당 유형이 사용 가능한 경우)로 바꾸거나 타입 캐스트를 추가해야합니다. –
@muistooshort 불행히도. Oracle은 부울 데이터 유형을 지원하지 않습니다. ActiveRecord는 마이그레이션에서 데이터 유형을 지정한 경우 true/false로 해석합니다. 이것은 뷰이므로 AR에 부울 (또는 오히려 내 질문입니다.이 필드를 부울로 해석하는 방법은 무엇입니까?) – theartofbeing
어떻게 뷰와 상호 작용합니까? 단순히 '아침', '오후', ... 방법을 무시할 수 있습니까? –