2013-03-22 122 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