【发布时间】:2016-05-08 10:29:51
【问题描述】:
标记用户的最佳方法是什么?如果你有一个团队模型,当你创建一个团队时,你想添加成员,这个架构将如何工作?
我正在考虑仅将行为用作 tanggble 并将其用于用户,但不确定这是否是最好的方法?是否还有其他宝石可以做这样的事情?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 tags
标记用户的最佳方法是什么?如果你有一个团队模型,当你创建一个团队时,你想添加成员,这个架构将如何工作?
我正在考虑仅将行为用作 tanggble 并将其用于用户,但不确定这是否是最好的方法?是否还有其他宝石可以做这样的事情?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 tags
要添加到@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 方法,您可以使用该方法定义“团队”中的哪个用户:
#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 %>
在没有任何额外依赖的情况下,这与“标记”非常接近。
【讨论】:
group / user 作为关联对象时才需要 nested_attributes。如果您只想将用户分配到现有组,以上就足够了