私は、ユーザーとプロジェクトの間に以下の関係を確立する関係モデルを持っています。この関係モデルでは、私はenumを使ってユーザーが持つプロジェクトの関係の種類(基本的に "役割"を確立する)を区別します。Rails列挙型のHas_many、through ...メソッドからの呼び出しがコントローラから呼び出せません
は今、私のプロジェクトのコントローラ私はprojectadminsアクションを呼び出すようにしようとしています
def projectadmins
@title = "Project Admins"
@project = Project.find(params[:id])
authorize @project, :visit?
@projects = @project.followers
render 'show_projectadmin_project'
rescue Pundit::NotAuthorizedError
flash[:danger] = "You are not authorized to access this page."
redirect_to projects_path || root_path
end
に私の関係のモデルは次のとおりです。
class Relationship < ActiveRecord::Base
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "Project"
validates :follower_id, presence: true
validates :followed_id, presence: true
enum role: [:admin, :collaborator, :visitor]
end
ユーザー&プロジェクトモデル:
class User < ActiveRecord::Base
has_many :own_projects, :class_name=>'Project'
has_many :projects
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_projects, through: :relationships, source: :followed
end
class Project < ActiveRecord::Base
belongs_to :owner, :foreign_key=>'user_id', :class_name=>'User'
has_many :reverse_relationships, foreign_key: "followed_id",
class_name: "Relationship",
dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower
end
「show_projectadmin_project 'ビュー:
<h3>Project Administrators</h3>
<% if @project.projectadmins.any? %>
<% @project.projectadmins.each do |user| %>
<div class="no-pad col-md-3">
<div class="inner-border">
<h5><%= link_to user.email, user %></h5>
</div>
</div>
<% end %>
<% end %>
されており、コントローラメソッドで私のコードはすべて次の関係(「@projects = @ project.followers」)を返すように設定されているように...私の質問は、私はこのコード行を変更する方法です次のような列挙型ロールタイプを持つ以下のすべての関係を返します。
私は "@projects = @ project.followers where(etc、etc)"のようなものを想定していますが、私にとってはうまくいきません。
UPDATE:enumロールタイプを追加すると、モデル内に別のhas_manyを設定することができなくなると思ったので、これをやりたくはありませんでした。私はちょうどフォロワーの関係を利用したかったし、何とか列挙型を区別することができますが、...
私は私のプロジェクトのモデルに以下を追加しようとしている:
has_many :projectadmins, -> { where role: :admin}, class_name: 'Relationship', through: :reverse_relationships, source: :follower
、私の中で次の行を呼び出します代わりに「.followers'
@projects = @project.projectadmins
今すぐアクション「projectadminsの作品と私は正しいビュー(私は推測する良い兆候)に到着...しかし、彼らが必要として、プロジェクト管理者がリストされていないのコントローラさあ。