我的控制器中有以下操作
cust = Customer.where(email: 'test@testing.com').pluck(:post_id)
@posts = Post.find(cust)
if params[:status]
if @posts.update_attribute(:customer_id, customer_id)
respond_to do |format|
format.json { render json: 'test'}
end
end
end
上面的update_attribute引发了未定义的方法错误。
cust将返回诸如[1,2,3]
我该怎么做
答案 0 :(得分:4)
尝试:
@posts = Post.where(id: cust)
@posts.update_all(customer_id: customer_id)
它构造一个SQL UPDATE语句并将其直接发送到数据库。
答案 1 :(得分:0)
尝试以下列方式更改查询
cust = Customer.where(电子邮件:'test@testing.com')。first.pluck(:post_id)
这将返回一个客户,然后使用post @posts = Post.where(id:cust)执行相同的操作.first
但是,如果你想在@posts中有多个记录,那么你需要遍历它们并单独更新。
@ posts.each do | post | if post.update_attribute(:customer_id,customer_id) 结束 端
答案 2 :(得分:0)
试试这个
cust = Customer.where(email:'test@testing.com')。pluck(:post_id)
Post.update_all({:customer_id,customer_id},{id:cust})
我们可以在update_all查询本身中包含where子句