2017-01-19 3 views
0

JavaScriptで動的にform_tagをマイページに追加する方法を解説しています。私はおそらく通常のフォームを追加する方法を考え出すことができますが、私はフォームを提出すると便利な "authenticity_token"を得ることができるようにform_tagsを追加することをお勧めします。ここ が私の見解です...Ruby on RailsでJavaScriptを使用してform_tagを作成して削除する

show.html.erb:私はform_tagを追加する方法を知りませんが

<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> 

そしてここでは、私のJavaScriptの期待のための私の概要である... application.jsは:

$(document).ready(function(){ 
    $("#add-new-form").click(function(){ 
    $(".invite-user-forms").append("form_tag??"); 
    }); 
}); 

さらに、私は「削除」button_tagをクリックしてform_tagを削除したい...私はそれぞれの新しいフォームはしかし、これが機能するためにはユニークなIDが必要になると想定します。 ..おそらく私のJavaScriptはこのように見えますか?

$(document).ready(function(){ 
    $("#remove-button-(some unique value)").click(function(){ 
    $("#unique-form-value").remove(); 
    }); 
}); 

ご迷惑をおかけして申し訳ありません。正しい方向にあなたを指すように

+0

「動的に」JSとはどういう意味ですか?新しいフォームが作成されるたびに、そのフォームのレコードもDBに存在しますか?またはモーダルポップアップでフォームを表示するか?本当の動力学が必要な場合は、レールが提供するRESTfulなAPIを利用し、has_many関係でフォームのモデルを作成する必要があります。 – Crashtor

+0

こんにちはCrashtor ... DBに関しては、私はすでに "コンテスト"と "コンテスト"の間に "has_many"関係を作成しました。したがって、このフォームは基本的に新しいコンテストを作成するためのものです。ただし、フォームが送信する電子メールの値が、「ユーザー」テーブル内の電子メールアドレスと一致するかどうかによって、「参加者」テーブルまたは「招待」ステージングテーブルに移動するため、少し複雑です。どのテーブルに行くべきかを決定するロジックは、コントローラ内で処理される。 – BYates

+0

さて、わかりました - フォームを追加したり削除したりするには、Ajaxを利用する必要があります。 – Crashtor

答えて

1

<%= 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 %> 

しかし、今 - あなたが実際に新しい競技を作成していない、それがすでに作成されている、あなたは上のボタンを押したときに - エントリを作成するときにも、それは空にすることはできません(それができます上記のように、送信ボタンにするだけなので、何かを<%= f.hidden_​​fieldに入れることができます。今、あなたはコンテストを編集しているので、このフォームは編集アクションの下にある必要があります。このフォームには'remote:true'が必要です。

リモコンの真実とAjaxのレールについては、「remote:true rails」とGoogleの手で得ることができる情報 - ロードがあります。

+0

@Crashtorありがとうございます。私は最初の行にエラーが表示されていますが、これは私のためにクリックし始めています。私はそれがContestant.new(単数)でなければならないと思います...それを変更しましたが、私はまだエラーが発生しています。 'form_for'に' @ '識別子があるはずですか? – BYates

+0

申し訳ありません、私の悪い - form_forコンテスト。 – Crashtor

+0

これは正しいトラックで私を得ました。私はそれを正しいものとしてマークします。 – BYates

関連する問題