我遇到了一些真正的问题,让我了解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
非常感谢任何帮助!
非常感谢, 詹姆斯
答案 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
。