如何显示 "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>
我想做的是让 "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>