我有三种模式:
has_many :products
)has_many :product_fields
和belongs_to :store
belongs_to :product
)我使用Sidekiq更新名为content
的product_fields中的列(当我创建模型时,我在名为second_content的同一模型的列中插入一个url,因此原始内容列在创建时为null ,但后来我试图将我的工作人员的内容列更新为新值。这是我的工作人员:
def perform(store_id)
store = Store.find(store_id)
store.products.each do |product|
if product.type_of == "Video"
video_url = URI.parse product.product_fields[0].second_content
video = open("LINK HERE").read
video = ActiveSupport::JSON.decode video
product.product_fields[0].update_attribute(:content, video)
end
end
end
我的控制器的创建操作如下:
def create
@store = Store.new(store_params)
respond_to do |format|
if @store.save
#Start video job
VideosWorker.perform_async(@store.id)
format.html { redirect_to @store, notice: 'Store was successfully created.' }
end
end
end
一切似乎都在起作用,除了在Sidekiq终端我得到错误:
undefined method `update_attribute' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_ProductField:0x0000010531bdd8>
答案 0 :(得分:1)
使用:
product.product_fields.first.update_attribute(:content, video)
而不是:
product.product_fields[0].update_attribute(:content, video)
,因为您无法在update_attribute
对象上调用CollectionProxy
,也请确保video
是字符串