Ruby on Rails: 从哪里查询设置列变量?

Ruby on Rails: Setting column variable from where 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 (time), out_time (时间),现在(布尔值)。

用户 has_many 次出席和 has_many 次出席会议。
通过出席会议 has_many 出席和 has_many 用户。
用户和会议的出席人数 belongs_to。

当用户签到时,它使用 check_in 方法并记录他们的时间。当他们 check_out 时,它 运行 使用 check_out 方法,这它确认他们的出席并记录他们的超时。 check_in 运行 的测试完美无缺,但是 check_out 却失败了?

我的问题是我将 where 查询分配给变量的方式是否有误(抱歉使用术语,我真的是新手)以及我是否错误地分配了列(因为它将列计为一个方法?)如果

我不知道出了什么问题,如果有人能帮我解决这个问题就太好了,谢谢。 :]

问题只是这一行 returns 是出席人数的集合,而不是只有一个出席人数:

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

您可以简单地在末尾添加 .first 以使其获取第一个,如下所示:

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

或像这样使用 find_by 方法:

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

之后,您将在出勤对象而不是集合上调用 attendance.present = true