Контроллер Создание многих элементов - Как создать некоторые, а не другие? - PullRequest
1 голос
/ 09 марта 2012

Предположим, у меня есть следующий метод.

def create_multiple
  project = Project.find(params[:project])
  params[:tasks].each_value { |task| @tasks << @project.tasks.build(task) }
  project.save

  respond_with @tasks
end

Я думал об изменении его для вызова .create вместо build для создания задач, потому что я хочу, чтобы они сохранялись, если нет ошибок валидации, даже если другие задачи терпят неудачу из-за валидации. Мне интересно, что другие думают об этой идее? Я тоже думал об использовании create_or_update, но думаю, что хочу побудить людей удалять элементы, которые были успешно созданы, а не просто повторять вызовы с одним и тем же списком, пока не будут созданы все элементы.

Есть ли лучший способ сделать это, чтобы я мог продолжать вызывать .save один раз и заставить его создавать те, которые проходят валидацию и дают сбой тем, которые не обходятся без полного отказа?

1 Ответ

0 голосов
/ 13 марта 2012

Не знаю точно, чего именно вы пытаетесь достичь, но если вы хотите избежать вызова save для тех, которые не проходят проверку, как насчет простого создания новых задач, фильтрации на допустимые и после этого присоединения их к проекту?

def create_multiple
  project = Project.find(params[:project])

  @tasks = params[:tasks].map{ |task| Task.new(task) }
                         .select{ |task| task.valid? }
  project.tasks = @tasks 
  project.save

  respond_with @tasks
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...