ActiveRecord查询中的模型没有属性

时间:2017-04-22 18:07:03

标签: sql ruby-on-rails ruby activerecord multiple-inheritance

我遇到了一些真正的问题,让我了解ActiveRecord并创建关联,所以我确信我的错误很简单。

我有一个@user对象我称之为行

@user = User.joins(researchers: :students).select(user_attributes).find(current_user.id)

其中user_attributes = 'researchers.year, users.givenname, ...等。

这很好用。当我尝试运行一条非常相似的线时:

@supervisor = User.joins(researchers: :supervisors).select(supervisor_attributes).where('supervisor.student_id = ?', 1)

supervisor_attributes = 'user.surname'

当我尝试调用@supervisor.surname时,我得到一个no方法错误,我完全不知道为什么。

我尝试了一些数据或解决方法,但我认为我的代码和关联存在更严重的错误,如下所示:

student.rb

class Student < ApplicationRecord
  #Must have the following
  validates :name, :email, :surname, :email, :supervisor, :registration_number, presence: true
  #ensures unique email addresses
  validates :email, uniqueness: true

  #assosiations
  belongs_to :researcher
end

supervisor.rb

class Supervisor < ApplicationRecord
  belongs_to :researcher
end

researcher.rb

class Researcher < ApplicationRecord
  #belongs_to :project
  belongs_to :user
  has_many :supervisors
  has_many :students
end

user.rb

class User < ApplicationRecord
  include EpiCas::DeviseHelper

  has_many :event_registrations
  has_many :events, through: :event_registrations
  belongs_to :project
  has_many :researchers
  has_many :students, :through => :researchers
  has_many :supervisors, :through => :researchers

  # def self.authenticate(username)
  #   where(username: username).first
  # end

  end

非常感谢任何帮助!

非常感谢, 詹姆斯

2 个答案:

答案 0 :(得分:0)

不应该是复数?

supervisor_attributes = 'users.surname'

答案 1 :(得分:0)

请您尝试以下查询

supervisor_attributes = 'users.surname'

@supervisor = User.joins(researchers: :supervisors).select(supervisor_attributes).where('supervisors.student_id = ?', 1)

where clause中,您应该使用database table name,按惯例,它应为复数supervisors