2011-02-07 4 views
0

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

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

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

ответ

3

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

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

Вот 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 
+0

Спасибо, я дам им часы и получить обратно к вам. –

+0

Спасибо, это именно то, что я ищу. –

+0

Без проблем, рад, что я мог бы помочь, но на самом деле все это Райан Бейтс и его потрясающие бесплатные скринкасты – daniel

Смежные вопросы