Поскольку тегирование является довольно распространенной проблемой, я рекомендую взглянуть на actions-as-taggable-on , широко используемый и очень хороший драгоценный камень для добавления тегов в любую модель Rails.
Несмотря на это, ваши модели выглядят довольно хорошо (за исключением того, что has_and_belongs_to_many
часто избегают в пользу has_many :through
), но я вижу здесь возможности для улучшения:
<% skill.positions.collect{|p| p.tags}.flatten.uniq.each do |t| %>
<%= t.name %>
<% end %>
Во-первых, этомного бизнес-логики, чтобы поставить на ваш взгляд.Вы должны сделать это в вашем контроллере вместо этого.Во-вторых, было бы более эффективным сделать это наоборот:
@tags = Tag.all :conditions => [ "tag.id IN (?)", skill.positions.map &:id ]
Есть еще более эффективные способы сделать это, но это должно дать вам представление.