分配 has_and_belongs_to_many 关系

Assign has_and_belongs_to_many relation

我有:

class Offer < ActiveRecord::Base
 ...
 has_and_belongs_to_many :tags
 ...
end

class Tag < ActiveRecord::Base
 ...
 has_and_belongs_to_many  :offers
 ...
end

def create
 ...
 @offer = @commercial_activity.offers.build(offer_params)
 tagsname = params[:tags].split(',')
 for tag in tagsname
   @offer.tags = Tag.find_or_create_by(name: tag, city_id: @commercial_activity.city)
  end
  ...
end

当我创建新优惠时出现此错误:

undefined method `each' for #<Tag:0x9fcc918>

我该如何解决这个问题?

谢谢

.find_or_create_by returns 单个对象,不是集合。 @offer.tags =需要设置为一个集合,而不是单个对象。

您可以使用@offer.tags << Tag.find_or_create_by

如果您也采用这种方法,我建议您添加一个 uniq 约束,这样您就不会将多个标签关联到同一标签。