2013-03-22 72 views
10

我一直在我的應用程序上觀看和複製這些railscast:196-nested-model-form-part-1197-nested-model-form-part-2。我還沒有專業賬戶,所以我無法觀看修改後的劇集。通過AJAX向嵌套表單添加動態字段

我正在開發rails4(邊緣)和link_to_function已被棄用,贊成unobstrusive JS(這是偉大的)。

我將繼續上面的railscasts(即survey/question)的例子。 我想要做的就是使用問題的部分通過不顯眼的JavaScript,我只是不知道如何以及在哪裏我應該這樣做。

我想通過兩種方式來完成:

  • 第一種方式是在我app/assets/javascripts文件surveys.js與功能添加,但我看不出我可以用我的部分從這裏開始。
  • 另一種方法是在我的SurveyController中創建一個新動作,該動作可以使用部分問題進行回覆,但我對調查控制器中的問題具有特定操作的事實感到困擾。

我不禁想到必須有更好的方法來做到這一點。

回答

9

我沒有上Railscasts親帳戶要麼,但有時它是看看Ryan's Github account一個好主意。他經常在他的劇集中發掘寶石。在那裏你會發現這個真棒nested_form寶石,它完全符合你的要求。

當然,你可以重新發明輪子,但我認爲使用瑞恩的寶石更容易和更快。文檔解釋瞭如何使用它。玩的開心!

+0

謝謝@Charles。我的確發現了nested_form gem,但我沒有嘗試它,因爲它需要使用'nested_form_for',而我已經在使用'simple_form'。我不太確定我可以同時使用兩者。 – Crystark 2013-03-22 13:33:07

+0

是的,你可以。只需使用'simple_nested_form_for'。查看[this](https://github.com/ryanb/nested_form#simpleform-and-formtastic-support)。 – weltschmerz 2013-03-22 14:42:45

+0

這就是我所追求的。我知道有專業帳戶,所以我能夠觀看修改的情節。 – Crystark 2013-03-30 00:34:30

17

您是否知道遠程鏈接和表單?你可以在這裏使用遠程鏈接來完成你想要的。

在你看來:

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

在你的控制器

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

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

的最後一步是創建一個文件的應用程序/視圖/調查/ add_question.js.erb

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

不要忘記爲你的ask_question_path創建路線

有關遠程鏈接和表單的詳細信息,請參閱:http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

+0

謝謝@Arjan。這就是我在我的SurveyController中創建一個新動作的意思,但由於我上面解釋的原因,我不確定這樣做。儘管如此,您的解決方案似乎乾淨而乾燥。不願意找到其他解決方案,我可能會爲此付出代價。 – Crystark 2013-03-22 13:37:53

+2

爲什麼j裏面有一個'<%= j render partial' – Clam 2014-11-11 04:49:18

+2

@Clam'j'是'escape_javascript' javascript助手的別名。 http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript – clozach 2014-11-13 20:24:49