zwo*_*wol 11 ruby-on-rails acts-as-taggable-on
在数据导入器中,我有一些代码试图将一堆ActsAsTaggableOn::Tag 对象添加到可标记的标记列表中:
existing_item = FeedItem.where(url: item[:url]).first
if existing_item.nil?
new_item = FeedItem.new
new_item.attributes = item.except(:id, :feeds)
new_item.feeds = Feed.where(id: feeds_old_to_new(item_feeds, feeds))
new_item.tag_list.add(
ActsAsTaggableOn::Tag.where(id: tags_old_to_new(item[:tags], tags)))
new_item.save!
else
# ... merge imported record with existing item ...
end
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为tag_list.add它采用标记名称列表,而不是标记对象.有没有办法添加标签对象?我在act-as-taggable-on文档中找不到任何内容,而且它的代码对我来说太难理解了(例如,Tag::concat似乎没有变异自我!)
我可以将标签映射到它们的名称,但是,act-as-taggable-on会运行适合用户输入的名称规范化,但不适用于批量数据导入,所以我不想这样做.
gem 实际上只是为你添加了这个:
has_many :taggings
has_many :tags, through: :taggings
Run Code Online (Sandbox Code Playgroud)
(支持多种标签有点复杂,但细节很简单。)
因此您可以像使用其他关联一样使用这些关联。在你的情况下,它会是这样的:
ActsAsTaggableOn::Tag.where(id: tags_old_to_new(item[:tags], tags))).each do | t|
new_item.tags << t
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |