在RubyonRails中使用JavaScript创建和删除form_标记
我试图弄清楚如何使用JavaScript动态地将在RubyonRails中使用JavaScript创建和删除form_标记,javascript,jquery,ruby-on-rails,ruby,Javascript,Jquery,Ruby On Rails,Ruby,我试图弄清楚如何使用JavaScript动态地将form_标记添加到我的页面中。我可能知道如何添加常规表单,但我更喜欢添加表单标签,以便在提交表单时获得方便的“真实性令牌”。 这是我的看法 show.html.erb: <button id="add-new-form">Add invite</button> <div class="invite-user-forms"> <%= form_tag("/contests/#{@contest.id}"
form_标记添加到我的页面中。我可能知道如何添加常规表单,但我更喜欢添加表单标签,以便在提交表单时获得方便的“真实性令牌”。
这是我的看法
show.html.erb:
<button id="add-new-form">Add invite</button>
<div class="invite-user-forms">
<%= form_tag("/contests/#{@contest.id}", remote: true, class: "invite-user", controller: "contestants", action: "create", method: "post") do %>
<%= text_field_tag(:emailVal) %>
<%= submit_tag("Send invitation") %>
<%= button_tag("Remove") %>
<% end %>
</div>
此外,我想通过单击“remove”按钮来删除表单标记。
…我假设每个新表单都需要一个唯一的ID才能工作,但是…那么我的JavaScript可能会是这样的
$(document).ready(function(){
$("#remove-button-(some unique value)").click(function(){
$("#unique-form-value").remove();
});
});
非常感谢您的建议。为您指明正确的方向:
<%= form_for Contestants.new, remote: true do |f| %>
<%= f.button :submit, "create new contestant" %>
<% end %>
在下面,您需要遍历已创建的所有表单
<%= @contestants.each do %>
<div class="invite-user-forms">
<%= form_tag("/contests/#{@contest.id}", remote: true, class: "invite-user", controller: "contestants", action: "create", method: "post") do %>
<%= text_field_tag(:emailVal) %>
<%= submit_tag("Send invitation") %>
<%= button_tag("Remove"), remote: true, method: :delete %>
<% end %>
</div>
<% end %>
然而,现在——你实际上并没有创建一个新的参赛者,当你点击上面的按钮时,它已经被创建了——而且,当创建一个条目时,它不能是空的(它不能只是一个提交按钮,就像我在上面向你展示的那样,所以最好你可以通过“动态”将一些东西放在a中)对于JS,你的意思是什么?每次创建一个新表单时,DB中也会存在该表单的记录?或者在模式弹出窗口中显示该表单,或者?我不太明白这个问题…如果你想要真正的动态,你需要使用rails提供的RESTful API,并为你的表单创建一个具有多个关系的模型。嗨,Crashtor…至于DBs,我已经在“竞赛”和“参赛者”之间建立了一种“有很多”的关系。因此,此表单基本上是用于创建新的参赛者。但是,它有点复杂,因为表单提交的电子邮件值将进入“参赛者”表或“邀请”staging table,取决于给定的电子邮件地址是否与“users”表中的地址匹配……以及确定要转到哪个表的逻辑在控制器中处理。好的,我明白了-然后您需要使用Ajax来添加和删除表单。有没有办法使用“authenticity_token”当通过JS创建这些表单时?是的,当然-您需要使用ajax以部分方式加载表单-我正在将其拼凑在一起。谢谢@Crashtor。这开始为我点击,尽管我在第一行中遇到错误。我假设它应该是competitor.new(单数)…所以我更改了它,但仍然有一个错误。在
的表单中应该有@
标识符吗?对不起,我的坏表单是给参赛者的。新的。好的,这让我走上了正确的轨道;我会将它标记为正确的。
<%= @contestants.each do %>
<div class="invite-user-forms">
<%= form_tag("/contests/#{@contest.id}", remote: true, class: "invite-user", controller: "contestants", action: "create", method: "post") do %>
<%= text_field_tag(:emailVal) %>
<%= submit_tag("Send invitation") %>
<%= button_tag("Remove"), remote: true, method: :delete %>
<% end %>
</div>
<% end %>