2016-10-04 12 views
1

属性を動的に追加および削除できるネストされた属性を持つフォームがあります(このフォームでは、「趣味を追加」および「趣味を削除」リンクをクリックできます)...ユーザーは趣味を持っています彼のプロフィールに入るとき、彼は1,2,5または50の趣味を加えることができる)。Rails:エントリの更新中にネストされた属性を削除する

nested form gemの助けを借りて、これは完全にうまく動作します。しかし、私はまた、ユーザーのプロファイルを更新する機能を提供します。

このとき、ユーザーは動的な「削除」リンクをクリックして趣味を取り除くことができます。しかし、これは私が望むように、データベースから「趣味​​」を削除するものではありません。だから私はJqueryまたはJavascript、または存在する場合、オブジェクトをデータベースから削除する何かを書こうとしている。これを行うにはどのような方法があります

... 
    ... 
    <%= f.fields_for :hobbys, :wrapper => false do |hobby| %> 
    <tr class="fields"> 
     <td> <%= user.text_field :hobby %> </td> 
     <td> <%= user.link_to_remove "Remove" %> </td> 
    </tr> 
    <% end %> 
</table> 
<p><%= f.link_to_add "Add hobby", :hobbys, :data => { :target => "#hobbys" } %></p> 

<script> 
    $(document).on('nested:fieldRemoved', function(event){ 
    var field = event.field; 
    /* ??? Delete field somehow ??? */ 
    }) 
</script> 

これは、コードがどのように見えるのですか?私は本当に...

がここにこれまでのところ私の最高の試みだ

UPDATE ... jQueryのデータベースをオフに削除することができますように、それはいないようだ....それについて移動する方法がわかりません

... 
    ... 
    <%= f.fields_for :hobbys, :wrapper => false do |hobby| %> 
    <tr class="fields"> 
     <td> <%= user.text_field :hobby %> </td> 
     <td> <%= user.link_to_remove "Remove" %> </td> 
    </tr> 
    <% end %> 
</table> 
<p><%= f.link_to_add "Add hobby", :hobbys, :data => { :target => "#hobbys" } %></p> 
<script> 
    $(document).on('nested:fieldRemoved', function(event){ 
    $.get("delete", { id: 2 }) 
    alert("Deleted: "); 
}) 
</script> 

idを引数としてハードコーディングすることで、私はこの邪魔なことをやろうとしています(まだ簡単には抽出できないので)。しかし、それはユーザーのIDとして文字列 "削除"を使用して.....ハァッ??

ここでは、ログ出力です:

Started GET "https://stackoverflow.com/users/delete?id=2" for 127.0.0.1 at 2016-10-05 08:35:15 -0400 
Processing by UsersController#show as */* 
    Parameters: {"id"=>"delete"} 
    Current user: anonymous 
Completed 404 Not Found in 19.5ms 

ActiveRecord::RecordNotFound (Couldn't find User with id=delete): 

答えて

1

あなたはあなたのためにそれを行うにはRubyで関数を呼び出すためにjqueryのを使用することができます。

Javascriptを:

$.get("delete", { id: id_to_delete }) 
    .done(function(deleted) { 
    alert("Deleted: " + deleted.id); 
    }); 

ルート(route.rb ):

get 'delete', to: 'application_controller#delete' 

アプリケーションコントローラ(application_controller.rb):

def delete 
    id = params[:id].to_i 
    to_delete = Hobby.find(id).destroy 
    render json: {id: id} 
end 
+0

私はid = "delete"のユーザーがいないというエラーが続きます......私は分かりません – ineedahero

1

は、各アクティビティのremoveボタンをクリックするだけで、リスナーを追加し、それを処理し、バックエンドAPIにAJAX要求を行います。それは以下のようになります:

関連する問題