Ruby on rails 4 Rails 4更新所有语法-参数错误
我得到了一个错误: 参数数量错误(2对1) 在我的Ruby on rails 4 Rails 4更新所有语法-参数错误,ruby-on-rails-4,arguments,rails-activerecord,update-all,Ruby On Rails 4,Arguments,Rails Activerecord,Update All,我得到了一个错误: 参数数量错误(2对1) 在我的任务模型上,当我定义更新所有任务状态的方法时。正确的语法是什么 class Task < ActiveRecord::Base belongs_to :user def self.toggle(user, groups) groups.each do |status, ids| user.tasks.update_all({status: status.to_s}, {id: ids}) #=> erro
任务
模型上,当我定义更新所有任务状态的方法时。正确的语法是什么
class Task < ActiveRecord::Base
belongs_to :user
def self.toggle(user, groups)
groups.each do |status, ids|
user.tasks.update_all({status: status.to_s}, {id: ids}) #=> error here
end
end
end
class GroupIdsByStatus
def self.group(options = {})
result = Hash.new {|h,k| h[k] = []}
options.reduce(result) do |buffer, (id, status)|
buffer[status.to_sym] << id
buffer
end
result
end
end
class TasksController < ApplicationController
def toggle
groups = GroupIdsByStatus.group(params[:tasks])
Task.toggle(current_user, groups)
redirect_to tasks_path
end
end
类任务此处出错
结束
结束
结束
类GroupIdsByStatus
def self.group(选项={})
结果=Hash.new{| h,k | h[k]=[]}
选项。减少(结果)do |缓冲区,(id,状态)|
buffer[status.to_sym]方法update_all
接收单个散列作为其唯一参数。您需要将所有更新放在单个参数中:
user.tasks.update_all(status: status.to_s, id: ids)
# The above line of code is identical to:
# user.tasks.update_all( {status: status.to_s, id: ids} ) # < Notice the curly braces
user.tasks.update\u all(状态:status.to\s,id:id)
#上述代码行与以下代码相同:
#user.tasks.update_all({status:status.to_s,id:ids})#<注意花括号
有关此方法的更多信息显示在中,我这样做了,但现在它显示了另一个错误:ActiveRecord::StatementInvalid in TasksController#toggle SQLite3::MismatchException:数据类型不匹配:UPDATE“tasks”SET“status”=“done”、“id”=NULL,其中“tasks”。“user_id”=?这是正确的语法,因此问题得到了解决。新问题是由ids
变量为NULL
引起的。您需要确保ids
不是NULL
,以防止出现该错误。