标记用户的最佳方法是什么?如果您有团队模型,并且在创建团队时,您想要添加成员,这个架构将如何运作?
我一直在考虑将行为视为可疑并将其用于用户,但不确定这是否是最好的方法?还有另外一个宝石可以做这样的事情吗?
答案 0 :(得分:2)
听起来你正在寻找has many through
关系。这将要求您有一个名为team_members
的加入表,以记录哪些用户是每个团队的成员,具有user_id
和team_id
列。例如,您的团队模型将具有如下所示的关系:
has_many :users, through: :team_members
然后,这将在Team上定义用于添加,查询和删除用户的适当方法。
更多信息是here
答案 1 :(得分:0)
要添加到@tpbowden
的答案,如果您只是想要"标记"用户,您可能希望使用has_and_belongs_to_many
:
# app/models/user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :teams
end
# join table "teams_users" - team_id | user_id
# app/models/team.rb
class Team < ActiveRecord::Base
has_and_belongs_to_many :users
end
这样您就可以使用singular_collection_ids
方法,通过该方法,您可以定义哪个用户位于&#34;团队&#34;:
#app/controllers/teams_controller.rb
class TeamsController < ApplicationController
def edit
@team = Team.find params[:id]
end
def update
@team = Team.find params[:id]
@team.update team_params
end
private
def team_params
params.require(:team).permit(user_ids: [])
end
end
#app/views/teams/edit.html.erb
<%= form_for @team do |f| %>
<%= f.collection_select :user_ids, User.all, :id, :name %>
<%= f.submit %>
<% end %>
这就像接近&#34;标记&#34;因为你没有任何额外的依赖关系。