活动记录表加入

时间:2017-04-20 21:46:07

标签: ruby-on-rails ruby join activerecord associations

我整天都在绞尽脑汁,不能让这个工作起来。我对ruby和rails很新,所以我为任何愚蠢的错误道歉。

我的问题是我一起加入3个表来获取@students对象。这有效,但如果我打电话给例如@ student.name,则'name'不存在。

以下是我的代码:

控制器 请注意我尝试使用.includes和.join,同样的问题也会发生。

class MyprojectController < ApplicationController
  def show
    @project = Project.find(params[:id])
    @dateformat = '%b %e - %H:%M'
    @user = Student.includes("INNER JOIN researchers ON students.researcher_id = researchers.id
                               INNER JOIN users ON researchers.user_id = users.id").where('user_id = ?', current_user.id)

end

用户模型

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

研究员模型

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

学生模特

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

所以每个学生都有一个researchar_id,每个研究人员都有一个user_id。因此,连接应该是student-&gt; researcher-&gt;用户,然后我希望能够使用@user对象中所有表的所有属性。

我尝试使用Student.join(:研究员,用户),但是尝试从Student表到研究人员表进行连接,然后尝试使用student表中的user_id加入用户表(但是user_id在研究员表中)。所以我自己刚刚完成了查询。

所有数据似乎都在那里,但作为'原始属性'。

非常感谢任何帮助!

-James

1 个答案:

答案 0 :(得分:1)

使用includes而不是尝试将事物加入到一个返回中(就像在sql中一样),这样您就可以在更少的查询中访问所有数据,但仍然可以访问对象中的数据。使用像ActiveRecord这样的ORM的关键是能够使用对象访问您的数据。使用ORM的缺点是,有时它不能提供您想要的确切数据,因为数据正在推入对象。使用includes提供了一种中间立场,您可以在其中访问对象中所需的数据,而不必为每个关联运行查询。

尝试类似的东西(取决于你获得用户ID的方式 - 我从项目中假设):

@user = User.includes(researcher: :student).find(project.user_id)

然后你可以通过普通的rails协会访问:

researcher = @user.researcher

student = researcher.student

我希望有所帮助,祝你好运!