2016-03-27 9 views
1

私は、ユーザーとプロジェクトの間に以下の関係を確立する関係モデルを持っています。この関係モデルでは、私は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の作品と私は正しいビュー(私は推測する良い兆候)に到着...しかし、彼らが必要として、プロジェクト管理者がリストされていないのコントローラさあ。

答えて

0

ちょうどこの上でフォローアップするために...私はちょうどに、モデル内の行を変更する必要がありました:

has_many :projectadmins, -> { where("relationships.role = ?", Relationship.roles[:admin]) }, through: :reverse_relationships, source: :follower 

、それが働いた...ちょうど誰を助け場合。

関連する問題