为什么 Rails 认为模型属性是一个方法?

why does Rails think Model attribute is a method?

这是一个自定义的 rake 任务文件,如果有差异的话。

我想从 Pupil 中提取所有 user_id,并应用它们为所有学生获取 User.id。

它很高兴地用正确的 user_id 打印出第 2 行,但随后考虑 user_id 一个 'method' 并在第 3 行中断。为什么?我的错误在哪里?

        course_pupils = Pupil.where(course_id: study.course_id)
        course_pupils.map { |a| puts a.user_id }
        pupils = User.where(id: course_pupils.user_id )

course_pupils 在第 3 行中调用它时仍然是一个关系。第 2 行是非破坏性的(如果是,它将把它变成一个 nils 数组,因为 puts returns 无)。

您需要做的:

pupils = User.where(id: course_pupils.pluck(:user_id) )

或类似的东西

你做错了,你不能在集合上调用实例方法user_id,试试这个

user_ids = Pupil.where(course_id: study.course_id).pluck(:user_id)
pupils = User.where(id: user_ids )

希望对您有所帮助!