未定义的方法`update_attributes'用于#<array:0xb5d61608> rails 4 </array:0xb5d61608>

时间:2014-01-16 06:06:17

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

我的控制器中有以下操作

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]

之类的ID数组

我该怎么做

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子句