1
Я получаю сообщение об ошибке:Rails синтаксис 4 update_all - ошибка Довод
Wrong number of arguments (2 for 1)
На моей модели Task
когда я определила мой метод, чтобы обновить статус всех задач. Каков правильный синтаксис?
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
я сделал это, но теперь он показывает другую ошибку: ActiveRecord :: StatementInvalid в TasksController #toggle SQLite3 :: MismatchException: несоответствие типов данных: UPDATE "tasks" SET "status" = 'done', "id" = NULL WHERE "tasks". "user_id" =? –
Это правильный синтаксис, поэтому проблема решена. Проблема * new * вызвана переменной 'ids' как' NULL'. Вы хотите убедиться, что 'ids' не' NULL', чтобы предотвратить получение этой ошибки. –
Хорошо, спасибо Уэс Фостер! Я проверю это, спасибо. –