2015-01-04 4 views
0

점검에서, 사용자 모델의 메소드를 체크 아웃Ruby on Rails : 어디에서 query?

def check_in(meeting) 
    if meeting.nil? 
    false 
    elsif Attendance.where({user: self, meeting: meeting}).any? 
    false 
    else 
    attendance = Attendance.create({user: self, meeting: meeting}) 
    attendance.in_time = Time.now 
    end 
end 

def check_out(meeting) 
    if meeting.nil? 
    false 
    else 
    attendance = Attendance.where({user: self, meeting: meeting}) 
    attendance.present = true 
    attendance.out_time = Time.now 
    end 
end 

사용자 모델에 대한 RSpec에 테스트

describe 'check_out' do 
    before(:each) do 
    @user = FactoryGirl.create(:user) 
    @meeting = FactoryGirl.create(:meeting) 
    @user.check_in(@meeting) 
    expect(@meeting.users).to include @user 
    expect(@user.meetings).to include @meeting 
    end 

    it 'checks out the user' do 
    expect(@user.check_out(@meeting)).to be_truthy 
    end 
end 

내가 열 출석 모델이

Failures: 

1) User check_out checks out the user 
    Failure/Error: expect(@user.check_out(@meeting)).to be_truthy 
    NoMethodError: 
    undefined method `present=' for #<ActiveRecord::Relation []> 
    # ./app/models/user.rb:84:in `check_out' 
    # ./spec/models/user_spec.rb:127:in `block (3 levels) in <top (required)>' 

실패 로그 : ID (int), user_id (int), meeting_id (int), in_time (시간), out_time (시간), present (부울)입니다.

참석자 수는 has_many이며 참석자 수는 has_many 회의입니다.
회의 참석자 수는 has_many이며 참석자 수는 has_many입니다.
출석은 사용자와 회의 모두에 속합니다.

사용자가 체크인하면 check_in 메소드를 사용하여 시간을 기록합니다. check_out을 실행하면 check_out 메소드가 실행되어 출석을 확인하고 시간을 기록합니다. check_in에 대한 테스트는 완벽하게 실행되지만 check_out에 대해서는 실패합니다.

내 질문은 어디에 변수를 (미안 해요, 정말 새로운 해요) 및 열을 잘못 할당 할 경우 (어떻게 그것을 열로 계산하기 때문에 변수에 위치 쿼리를 할당하는 방법에 오류가 있습니다. 방법?) If

나는 무엇이 잘못되었는지 전혀 모른다. 누군가가 나를 도와 주면 대단 할 것이다. 고마워. : 당신은 단순히과 같이, 첫 번째를 잡아 가지고 끝까지 좁은 방을 추가 할 수 있습니다

attendance = Attendance.where({user: self, meeting: meeting}) 

:]

답변

1

문제는이 라인 대신에 하나 명의 출석 출석의 컬렉션을 반환 단지이다 :

attendance = Attendance.where({user: self, meeting: meeting}).first 

정도 같은 방법 find_by 사용

attendance = Attendance.find_by({user: self, meeting: meeting}) 

AF를 그 대신 컬렉션 대신 출석 개체에 attendance.present = true을 부를 것입니다.