首先,我假设您有一个带有“名称”字段的用户模型和一个带有“名称”字段的组模型。
您需要用户和组之间的模型。我们称之为分组:
rails g model grouping user_name:string group_name:string
在分组模型(grouping.rb)中,您输入:
belongs_to :user
belongs_to :group
在用户模型中:
has_many :groupings, :dependent => :destroy
has_many :groups, :through => :groupings
在组模型中:
has_many :groupings, :dependent => :destroy
has_many :users, :through => :groupings
在用于编辑或更新用户配置文件的 _form 文件中,您输入:
<div class="field">
<%= f.label :group_names, "Groups" %>
<%= f.text_field :group_names %>
</div>
最后,用户类必须知道如何处理来自表单的信息。插入 user.rb:
attr_writer :group_names
after_save :assign_groups
def group_names
@group_names || groups.map(&:name).join(' ')
end
private
def assign_groups
if @group_names
self.groups = @group_names.split(/\,/).map do |name|
if name[0..0]==" "
name=name.strip
end
name=name.downcase
Group.find_or_create_by_name(name)
end
end
end
assign_groups 删除空格并将所有单词小写,因此您不会有多余的标签。
现在,您可以在用户个人资料的显示文件中显示用户的组:
<p>Groups:
<% @user.groups.each do |group|%>
<%= group.name %>
<% end %>
</p>
希望,这有帮助。