如何显示 "Pending" 的用户加入群组?

How do I show Users that are "Pending" to join Group?

我想做的是让 "pending" 的用户加入一个群组。我有 3 个模型:用户、成员资格和组。我已使用户能够请求加入一个组。当发出请求时,成员模型中有一个名为 "state" 的属性,我将其设为默认值 "pending"。组管理员单击接受后,用户的状态将更改为 "active"。 如何只显示处于 "pending" 状态的用户?

我可以通过在群组控制器中添加代码“@members = @group.users”来显示所有请求加入群组的用户("pending" 和 "active") .当我只想显示 "pending" 用户时,我在模型组中创建了一个名为 "pending_members" 的方法。这没有用。

目前我收到一条错误消息:"ActionView::MissingTemplate in Groups#show"。错误消息还突出显示了代码“<%= render @members %>”。 [当我使用代码 @members = @group.users 时,网页会同时显示 "pending" 和 "active" 用户]


以下是每个模型属性:

create_table "groups", force: :cascade do |t|
  t.string   "name"
end

create_table "memberships", force: :cascade do |t|
  t.integer  "user_id"
  t.integer  "group_id"
  t.string   "state",   default: "pending"
end

create_table "users", force: :cascade do |t|
  t.string   "email"
  t.string   "first_name"
  t.string   "last_name"
end

这是每个模型中的代码:

class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

class User < ActiveRecord::Base
  has_many :memberships, dependent: :destroy
  has_many :groups, through: :memberships
end

class Group < ActiveRecord::Base
  has_many :memberships, dependent: :destroy
  has_many :users, through: :memberships
end

以下是群组控制器中的代码:

def show
    @group = Group.find(params[:id])
    @members = @group.pending_members
end

以下是群组模型中的代码:

def pending_members
  Membership.where(state: "pending")
end

下面是 Groups/show.html.erb 视图中的代码:

<div class="container">
    <div class="row">
        <%= render @members %>
    </div>
</div>

如果您想显示处于待处理状态的用户,那么您 pending_members 方法应该 return 用户集合。事实上,它 return 是会员资格的集合。

你可以这样写:

def pending_members
  User.includes(:memberships).where("memberships.state" => "pending)
end

然后为了您的视图工作,您可以将其放入

<%= render partial: 'member', collection: @group.pending_members %>

然后您需要在 app/views/groups 目录中包含部分 _member.html.erb,它可能看起来像这样:

<div id="user-<%= member.id %>">
  <p>name: <%= member.first_name %> <%= member.last_name %></p>
  <p>email: <%= member.email %></p>
</div>