nie bardzo mogę/wiem jak poradzić sobie z problemem tworzenia ankiety, a mianowicie:
mam sobie traki przykładowy widok gdzie użytkownik wybiera skalę znajomości języka, jak wybierze to AJAX tworzy nową instancje z daną wartością, a robię to tak:
controller:
def create
@answer_questionnaire = AnswerQuestionnaire.new answer_questionnaire_params
respond_to do |format|
if @answer_questionnaire.save
format.json { render json: @answer_questionnaire }
else
format.html { render :new }
format.json { render json: @answer_questionnaire.errors, status: :unprocessable_entity}
end
end
end
Pogubiłem się trochę. Zakładam że załączasz widok new - tak wnioskuję z tego że dołączasz też create
Kiedy wywołujesz ten CS? Po submicie formularza? Po zmianie wpisu w danym polu? Niestety tego nie załączyłeś w kodzie.
Jeśli robisz create, to z gruntu nie powinieneś tego potem próbować edytować, bo do tego jest edit… wydaje mi się też że coś za bardzo kombinujesz z zapisywaniem tego forma, ale to takie moje gdybanie nie widząc kodu do forma i nieco więcej CSa
$ ->
$(document).on "change", ".input_questionnaire", ->
type = $(this).data('answer-id') === 'undefined' ? 'POST' : 'PUT'
id = $(this).data('answer-id') === 'undefined' ? 's' : ('/' + $(this).data('answer-id'))
$.ajax({
type: type,
url: "/answer_questionnaire" + id,
data: { answer_questionnaire: { answer: $(this).val() } },
success:(data) ->
// jeśli to był post, wyciągnij tu sobie id z danych zwracanych i
$(this).data('answer-id', id_pobrany_z_data)
error:(data) ->
console.log "NO"
})
To oczywiście tylko taka koncepcja. Generalnie chodzi o to, że jak zrobisz create takiego obiektu, to zassij sobie informację o jego ID i dalsze zapytania do tego samego obiektu rób już PUT/PATCH pod inny adres.
Szczególnie to ‘s’. Chodzi o to, że jak to doklejamy do adresu, o tu:
url: "/answer_questionnaire" + id,
To dla POST chcemy uzyskać answer_questionnaires, a dla PUT answer_questionnaire/:id.
Kod powyżej to tylko taka luźna koncepcja, oczywiście nie testowałem tego - no i moje doświadczenie z CoffeeScriptem jest bardziej ubogie niż bym chciał, więc możesz musieć sobie przełożyć to bardziej z JS na CS.
Właściwie nic, samo się robi Jak się przyjrzysz temu fragmentowi kodu który wyżej wrzuciłem, to ID ląduje w data-attribute o nazwie ‘answer-id’, na podstawie którego na samym początku funkcji jest wybierana metoda (POST lub PUT) i wykonywane zapytanie albo do create, albo do update.
Przynajmniej w teorii, mogą tam być jakieś bugi, chodziło bardziej o ogólną ideę. (Aż tyle czasu żeby robić sobie appkę testową i sprawdzać czy to jest idealnie nie mam )