控制器创建多个项目 - 如何创建一些不是其他项目?

时间:2012-03-09 04:08:43

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

假设我有以下方法。

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 :(得分:0)

不确定您要实现的目标,但是如果您想避免在验证失败的情况下调用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