has_many を再開するユーザー クラスがあり、それぞれに多くのアイテムがあります。ユーザー/ショーページで、複数の履歴書をレンダリングしていますが、これは機能しています。私の users_controller には次のものがあります。
def show
...
@resumes = @user.resumes.paginate(page: params[:page])
@resume = @user.resumes.build if user_signed_in?
@resume_items = @user.res.paginate(page: params[:page])
@edu_items = @resume.edu.paginate(page: params[:page])
...
end
User モデルで関数 res を定義しました。
def res
Resume.where("student_id = ?", id)
end
そして、それは非常にうまくいきました。ただし、Resume モデルの関数 edu で同じことをしようとしています。
def edu
Education.where("resume_id = ?", id)
end
@edu_items は何も設定されていません。id を特定の履歴書の id に変更すると、すべての履歴書を除いて、その履歴書のアイテムが正しくレンダリングされるため、このメソッドと特に関係があることがわかりました。私はそれが簡単な修正であることを知っています.この時点であまりにも長い間それを見つめていたので、それを理解することはできません. どんなアドバイスも素晴らしいでしょう。
編集: @makaroni4: @educations = @user.educations の代わりに、各履歴書の項目を別々に保持したいと思います。@educations = @resume.educations になる教育のようなメソッドを定義することは可能ですか?
EDIT 2: アドバイスのおかげで、私がやろうとしていたことがうまくいきました。edu メソッドを完全に廃止し、ローカル変数をパーシャルに渡すことで解決しました。
<%= render :partial => 'shared/edu', :as => :educations, :locals => {:resume_educations => resume_item.educations} %>
共有/教育
<% if resume_educations.any? %>
<ol class="educations">
<%= render partial: 'shared/edu_item', collection: resume_educations %>
</ol>
<%= will_paginate @educations %>
<% end %>
おそらく最もクリーンなソリューションではありませんが、うまくいくようです。