尝试通过Rails控制台了解如何执行此操作。
订阅 - 有许多类别 类别 - 属于订阅
有9个类别,但我需要添加十分之一。
如果他们订阅了#9类别,我希望他们在添加时已经订阅了#10类别。所以它会像:
subs = Subscription.all
subs.each do |sub|
if sub.categories.where(name: "Category Number One").exists?
puts "it does indeed exist." #update this line to add "Category Number 2" to sub.categories
else
puts "it does NOT exist."
end
end
我对如何处理if
块感到有些困惑。似乎有一种方法可以做我想做的事情(注意category_ids是Array
):
http://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-3C-3C
我究竟会传递什么?
如果我使用sub.categorizations << 10
尝试使用实际的类别ID,我会得到:
ActiveRecord::AssociationTypeMismatch: Categorization(#70215789049700) expected, got Fixnum(#70215753183840)
如何以正确的方式解决此问题的任何见解将不胜感激。
答案 0 :(得分:1)
通过
创建sub.categories.create(name:“Category Number 2”)
答案 1 :(得分:0)
使用订阅者ID创建新的Categorization
是可行的方法。此外,不要访问所有订阅,只访问我们需要更改的订阅,并允许批量访问它们以最大限度地减少内存使用。
cat1 = Category.where(:name: "Category One").first!
Subscription.joins(:categorizations).where(:categorizations=>{:category_id=>cat1.id).find_each do |sub|
sub.categorizations.create(category_id: 10)
end