2013-03-22 28 views
10

Oglądałem i odtwarzałem te railscasty w mojej aplikacji: 196-nested-model-form-part-1 i 197-nested-model-form-part-2. Nie mam jeszcze konta Pro, więc nie mogę oglądać poprawionego odcinka.Dodawanie dynamicznych pól do formularza zagnieżdżonego za pośrednictwem AJAX

Zajmuję się pod szynami4 (krawędzi) i link_to_function został wycofany na rzecz niewłasnego JS (co jest świetne).

Będę zachowywał przykład powyższych railscastów (tj. Ankieta/pytanie). Chciałbym użyć częściowego pytania poprzez niewzruszony javascript i po prostu nie wiem jak i gdzie powinienem to zrobić.

Myślałam dwa sposoby, aby to zrobić:

  • Pierwszy sposób byłoby dodać w moim app/assets/javascripts pliku surveys.js z funkcją ale nie widzę w jaki sposób mogę używać mojego częściowy stąd .
  • Innym sposobem jest utworzenie nowej akcji w moim SurveyController, która odpowiedziałaby przy użyciu częściowego pytania, ale przeszkadza mi fakt posiadania akcji specyficznej dla pytań w moim kontrolerze ankiet.

Nie mogę nie myśleć, że musi istnieć lepszy sposób na zrobienie tego.

Odpowiedz

9

nie mam pro konto na Railscasts albo, ale czasami jest to dobry pomysł, aby rzucić okiem na Ryan's Github account. Często rozwija klejnoty do rzeczy, które opisywał w swoich epizodach. Tam znajdziesz ten niesamowity klejnot nested_form, który robi dokładnie to, co chcesz.

Oczywiście można wymyślić nowe koło, ale myślę, że o wiele łatwiejsze i szybsze jest użycie klejnotu Ryana. Dokumentacja doskonale wyjaśnia, jak z niego korzystać. Baw się dobrze!

+0

Dziękuję @Charles.Rzeczywiście znalazłem ten klejnot nested_form, ale go nie wypróbowałem, ponieważ wymaga użycia 'nested_form_for' i używam już' simple_form'. Nie jestem do końca pewien, czy mogę użyć obu. – Crystark

+0

Tak, możesz. Po prostu użyj 'simple_nested_form_for'. Sprawdź [to] (https://github.com/ryanb/nested_form#simpleform-and-formtastic-support). – weltschmerz

+0

Po to poszedłem. Wiem, że mam konto pro, więc mogłem obejrzeć poprawiony odcinek. – Crystark

17

Czy wiesz o zdalnych linkach i formularzach? Możesz użyć zdalnego łącza, aby osiągnąć to, co chcesz.

W widoku:

link_to 'Add question', add_question_path(@survey), remote: true 

w kontroler

def add_question 
    @survey = Survey.find(params[:id]) 

    respond_to do |format| 
    format.js #add_question.js.erb 
    end 
end 

Ostatnim krokiem jest utworzenie pliku app/views/Ankieta/add_question.js.erb

$('#my_survey').append('<%=j render partial: 'my_question_partial' %>') 

Nie zapomnij o utworzeniu trasy dla swojej ścieżki zapytania_decydowania

Aby uzyskać więcej informacji na temat odległych linków i form patrz: http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

+0

Dziękuję @ Arjan. To właśnie miałem na myśli, tworząc nową akcję w moim SurveyController, ale nie byłem do końca pewien co zrobić z powodów wymienionych powyżej. Twoje rozwiązanie wydaje się jednak czyste i suche. Failling, aby znaleźć inne rozwiązanie, prawdopodobnie pójdę po to. – Crystark

+2

dlaczego jest j wewnątrz '<% = j renderowanie częściowe' – Clam

+2

@Clam 'j' jest aliasem dla helpera' escape_javascript' javascript helper. http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript – clozach