RoR: работа с несколькими моделями в одной форме? - PullRequest
0 голосов
/ 07 февраля 2011

Я начинаю работу над приложением для управления записями.Система позволит пользователям управлять записями, хранящимися в базе данных, каждая запись может иметь 1 или более объектов, называемых категориями, и каждая категория может иметь 1 или более объектов, называемых преимуществами.у меня есть 3 модели: запись (категории has_many), категория (имеет поле заголовка и принадлежат записи, преимущества has_many), преимущество (имеет поля заголовка и описания и категорию принадлежат_).

как я могу позволить пользователю добавлять новые категории и преимущества при создании или обновлении записи, а затем обновлять / сохранять все их вместе с функцией одного клика?как пользователь не должен знать, что категории и преимущества являются отдельными объектами, он должен рассматривать их как часть записи?Пользователь должен иметь возможность добавлять любое количество категорий и преимуществ на экране создания / обновления записи.

любая помощь по этим двум вопросам будет принята с благодарностью!

1 Ответ

3 голосов
/ 07 февраля 2011

Легко, запись должна приниматься как для категории, так и для преимущества. Вы можете создать новый объект с помощью клиентского JavaScript, посмотрите эти эпизоды (все 3 из них), они содержат все, что вам нужно знать: http://railscasts.com/episodes/196-nested-model-form-part-1

Пришлите мне электронное письмо, если вы не можете заставить его работать, я должен был переписать его, но идея та же.

Вот JavaScript, который я использовал:


//This function adds the fields for the photo association
function add_fields(id, association, content) {  
   var new_id = new Date().getTime();  
   var regexp = new RegExp("new_" + association, "g");
   var regexp2 = new RegExp("new\\]\\[" + association, "g");
   content = content.replace(regexp, new_id);
   content = content.replace(regexp2, new_id);
   $(id).append(content);  
}


 def link_to_add_fields(name, id, f, association, partial)
   new_object = f.object.class.reflect_on_association(association).klass.new
   fields = f.fields_for(association, new_object, :child_index => "new") do |builder|
     render(:partial => partial, :locals => {:form => builder})
   end
    link_to_function(name, "add_fields( \"#{id}\", \"#{association}\", \"#{escape_javascript(fields)}\" ) " )
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...