Какой лучший способ отредактировать много объектов одного класса в одной форме Rails? - PullRequest
2 голосов
/ 05 декабря 2011

Я работаю над формой Rails, которая позволит пользователю редактировать атрибуты многих объектов класса за одну отправку. Мой первоначальный инстинкт был создать внешний form_for блок, а затем перебрать элементы внутри него, используя fields_for.

Тем не менее, нет объекта, который имеет отношение «один-много» к объектам, которые будет изменять форма, и поэтому мне кажется, что нет объекта, который был бы правильно передать в form_for.

В любом случае, я хотел бы увидеть пример формы, которая изменяет несколько объектов одновременно, не обращаясь к «родительскому» объекту. Возможно, это будет включать form_tag?

(Примечание: я работаю в хамле, поэтому ответы в хамле были бы офигенными, хотя и ненужными.)

Ответы [ 2 ]

4 голосов
/ 06 декабря 2011

Что ж, наличие родительского объекта облегчит задачу.

Для массовых обновлений многих объектов ключом является использование правильного входного имени, чтобы rails анализировал параметры как массив, то есть

@posts.each do |post|
  fields_for "posts[#{post.id}]", post do |p|
    p.text_field :name
    p.hidden_field :id
  end
end

Посмотрите на сгенерированный источник HTML, чтобы увидеть, какой атрибут name получает текстовый ввод.Если это сделано правильно, params [: posts] теперь будет хешем в контроллере, который вы затем сможете обновить.

http://railscasts.com/episodes/165-edit-multiple тоже должно быть актуально

0 голосов
/ 06 декабря 2011

В моей реальной ситуации есть дополнительные складки, но вот псевдокод, который, я надеюсь, проиллюстрирует подход, который я выбрал:

 = form_tag url_for(:controller => "the_controller",
                     :action => "update") do
     @objects_to_be_updated.each do |object|
       = check_box_tag "[desired_path][through_the][parameters_hash]", true, object.boolean_attibute
       = text_field_tag "[another_path][through_the][parameters_hash]", object.text_attribute
     end
 end

И так далее.

Использование _tag вариантов помощников по формам, которые не требуют связи с моделью Active Record, немного болезненно, но, похоже, дает вам больший контроль над структурой результирующих параметров.

...