私は一日中脳を痛めつけており、これを動作させることはできません。私はルビーとレールには非常に新しいので、愚かなエラーのために私の謝罪。アクティブレコードテーブルジョイン
私の問題は、3つのテーブルをまとめて@studentsオブジェクトを取得することです。これはうまくいきますが、もし私がexample @ 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
すべての学生にはresearcher_idがあり、すべての研究者にはuser_idがあります。だから、joinはstudent-> researcher-> userに行き、@userオブジェクト内のすべてのテーブルのすべての属性を使いたいと思っています。
私はStudent.join(:researcher、:user)を使用しようとしましたが、Studentテーブルから研究者テーブルへの結合を試みた後、studentテーブルからuser_idを使用してユーザーテーブルに参加しようとしましたのuser_idが研究者テーブルにあります)。だから私はちょうどクエリを自分で行った。
すべてのデータは「生の属性」として存在しているようです。
ご協力いただければ幸いです!
-James
ActiveRecordで複数の結合を実行すると、データにアクセスするのに少しばかげてしまいます。普通の方法の代わりに '@student [" name "]'を使ってアクセスする必要があるかもしれません。 – octopushugs
ありがとう@Octopushugsと私はあなたが正しい線に沿っていると思うが、それは動作しませんでした:( –