假设我有以下方法。
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一次并让它创建一些通过验证并失败的那些没有完全失败的那些?
答案 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