分配has_and_belongs_to_many关系

时间:2016-03-13 15:35:34

标签: ruby-on-rails ruby ruby-on-rails-3

我有:

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>

我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:0)

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

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

如果您采用这种方法,我建议您添加uniq约束,这样您就不会有多个与同一标记的标记关联。