Обновить все данные модели в рельсах - PullRequest
3 голосов
/ 12 июля 2011

Например, у нас есть:

class PublicLibrary  < ActiveRecord::Base
  has_many :books
end


class Book  < ActiveRecord::Base
  belongs_to :public_library
end

Если мы хотим обновить все книги в PublicLibrary, мы можем добавить в модель PublicLibrary

accepts_nested_attributes_for :books, :allow_destroy => true, :reject_if=>:all_blank

И теперь мы можем сделать что-то вроде этого

library=PublicLibrary.find(ID)
library.update_attributes(:books_attributes=>{<bunch of books here>})

И все связанные книги будут обновлены, некоторые книги будут удалены, а некоторые новые книги будут вставлены в настольные книги

Теперь у меня есть модель книги, которая неимею отношение к PublicLibrary:

class Book  < ActiveRecord::Base
end

У меня есть админ-панель, которая показывает все книги в одной большой таблице и хочу обновлять / удалять / вставлять новые книги одним щелчком мыши, поэтому я хочу что-то вроде

Book.bulk_update({...books...}) 

Или работа с подмножеством (не уверен, что мне это действительно нужно, но если мы можем это сделать ... почему бы не знать, как?)

books_to_update=Book.where(...).bulk_update({...books...})

КонечноКнига может иметь несколько вложенных моделей.

У вас есть идеи?PS В настоящее время у меня есть только идея иметь какого-то родителя и сделать обновление для него ...

1 Ответ

0 голосов
/ 12 июля 2011

в вашем хэше {... books ...} есть несколько книг, для которых вы хотите

books.each { |id, book| Book.find(id).update_attributes(book) }

или вы хотите сделать настоящее массовое обновление (то есть обновление для всех книг в действии) тогда вы можете использовать http://apidock.com/rails/ActiveRecord/Relation/update_all

...