質問文通りですが多対多で関連付けられているモデルが取得できません。
ER図で書くと以下のようなリレーションになっております。
なお、ユーザーモデルはdevise製のものです。
一つのユーザーは応募テーブルを介して多数の仕事を持っており、
仕事テーブルは応募テーブルを介して多数のユーザーをもっているという作りになっています。
ActiveRecordのリレーションは以下のように書いています。
#TWorkモデル class TWork < ApplicationRecord has_many :user_accounts, through: :t_applicants, source: :t_user end #TUserモデル class TUserAccount < ApplicationRecord has_many :t_works, through: :t_favorite, source: :t_work devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable #TApplicantモデル class TApplicant < ApplicationRecord belongs_to :t_work belongs_to :t_user end
以上の条件を踏まえて現在ログインしているユーザーが応募している 仕事の値(例では仕事のタイトル)を取ってきたいのですが、メソッドの書き方が悪いのか、リレーションメソッドの書き方がおかしいのか取得できません。取得しているメソッドは以下のようにしています。
#userモデル class TUserAccount < ApplicationRecord has_many :t_works, through: :t_favorite, source: :t_work devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable def show_work(user_id) #ここのメソッドの中身をどう書けばいいかわからない TUser.includes(:t_works).where(t_user: {id: user_id}) end end #userコントローラー/TUserモデルをインスタンス化し、show_workメソッドを呼び、引数に現在のユーザーのidを渡す class TUserController < ApplicationController def show worklist = TUser.new @worklist = worklist.show_work(params[:id]) #もしくは @worklist = worklist.show_work(current_t_user.id) end end <!-- show.html.erb --> <h1>応募中仕事一覧</h1> <% @worklist.each do |work| %> <%= work.title %> <% end %>
こうすると@worklistはnilclassやら、少しいじるとミススペルじゃないか?等エラーを吐きます。
コメントにも書いておりますが、分からないことはdef show_work
メソッドの中身の書き方と、またモデルクラスのhas_many_thoroughメソッドのオプション等の書き方です。
この3つのテーブルを全て結合し、候補者テーブルの外部キーt_user_idが現在ログインしているユーザーとマッチした仕事テーブルの値を取るということをしたいのですがどうすればよいでしょうか?
色々調べて試したのですが3日間くらい詰まっています。
長くなり申し訳ございませんが、よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。