Rails маршрути и AJAX заявки

В момента съм напълно блокиран и наистина бих могъл да имам нужда от помощ.

Ето какво се опитвам да направя. Използвам Ruby on Rails и имам два модела. Едното е Упражнения, а другото Рутини. Рутината се състои от различни упражнения. В момента съм го настроил, така че да мога да плъзгам и пускам от списък с упражнения в списък с упражнения за текущата избрана рутина. За да моделирам тази връзка, имам модел exercise_routine, който съответства на exercise_id и routine_id, за да моделирам, че те са свързани. И така, това, което правя след това, е, когато потребител удари, за да запази промените след цялото им плъзгане, използвам jQuery, за да събера масив от всички упражнения_id в списъка.

Сега е частта, в която съм заседнал. След това искам да предам този списък към действието за създаване на контролера exercise_routine. В това действие за създаване след това щях да сравня този списък с упражнения с всички, които вече съществуват, и да създам всички нови асоциации и да изтрия тези, които са били премахнати.

Виждал съм множество примери и нито един не ми се получи. И така, върнах се просто към моя масив от идентификатори, които трябва да предам на контролера. Въпросът ми в този момент е как успешно да предам този масив като параметър към действието за създаване или трябва да изпратя това някъде другаде на контролера exercise_routine? Мисля, че AJAX заявката, която използвах, е добра, но маршрутизирането наистина ме хвърля в цикъл.

Всяка помощ се оценява. Ако трябва да видите код или нещо друго, ще актуализирам според нуждите.


person HarvP    schedule 23.04.2014    source източник


Отговори (1)


# send an ajax request with your ids
$.ajax
  url: "routines/1"
  type: "PUT",
  data: { exercice_ids: getExerciceIds() }
  success: function() {}


# update the routine exercice ids in the controller
def update
  @routine = Routine.find(params[:id])
  @routine.exercice_ids = params[:exercice_ids]
  @routine.save
end

Това трябва да работи. Може да искате да имате друго действие освен update.

person Robin    schedule 23.04.2014
comment
Тези отговори помагат да се изясни малко. Функцията за актуализиране ме обърка. Имам has_many чрез за съчетания и упражнения. Така че имам масив, който мога да получа, който е @routines.exercises. Трябва да направя записи в таблицата, като създам нов Exercise_Routine, който просто предава exercise_id и routine_id. Идеята ми беше да изготвя заедно списък със съществуващи упражнения за рутината и след това новия списък. Сравнете двете и създайте нови записи за добавени нови упражнения и прегледайте и премахнете записи за тези, които вече не са в списъка. Това е част от объркването. - person HarvP; 24.04.2014
comment
Ако подадете exercice_ids, това означава, че те съществуват, нали? - person Robin; 24.04.2014
comment
Ако зададете exercice_ids на рутина, Rails ще се справи с премахването на упражненията, чийто id не присъства в списъка с id, и ще добави новите. - person Robin; 24.04.2014
comment
Така че exercise_ids трябва да бъдат предадени като масив от стойности? Правех го като низ и след това го разделях на масив в контролера. Или няма значение, стига да предам масив към това? Благодаря за помощта между другото. - person HarvP; 24.04.2014
comment
Предайте го както искате. Но с jquery вероятно е по-лесно да се получи масив и методът ajax ще го сериализира добре. (можете да използвате метода $.map от jquery, за да получите лесно своя масив от идентификатори. - person Robin; 24.04.2014
comment
Добре, така че имам настройка, както казахте, но по някаква причина получавам грешка при валидиране. Пише, че Рутината не може да бъде празна. Тъй като рутината е това, което я нарича, как може идентификаторът за рутина да е празен? Проверих го точно преди обаждането и има идентификатор и съществува. - person HarvP; 25.04.2014
comment
Къде го пише това? Кой модел има тази грешка? - person Robin; 25.04.2014
comment
Той идва на модела exercise_routine, който потвърждава, че exercise_id и routine_id присъстват, когато са създадени. - person HarvP; 25.04.2014