Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RubyonRails中使用JavaScript创建和删除form_标记_Javascript_Jquery_Ruby On Rails_Ruby - Fatal编程技术网

在RubyonRails中使用JavaScript创建和删除form_标记

在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}"

我试图弄清楚如何使用JavaScript动态地将
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 %>