2016-10-04 55 views
1

我有一個嵌套屬性的表單,您可以在其中動態添加和刪除屬性(表單讓您可以單擊「添加業餘愛好」和「刪除業餘愛好」鏈接...用戶有業餘愛好,當進入他的個人資料時,他可以添加一,二,五或五十愛好)。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> 

有沒有辦法做到這一點?我真的不知道如何去了解它....它似乎並不像jQuery可以刪除掉數據庫...

UPDATE

,這裏是我最好的嘗試,到目前爲止...

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

你可以使用jQuery來調用一個函數在Ruby來爲你做它:

的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 =「刪除」......我不明白 – ineedahero

1

添加監聽器爲每個活動remove按一下按鈕,讓您從後端API的Ajax請求處理它。它會看起來像下面這樣:

$('.activities').each(function(activity) { 
    $(activity).click(function(event) { 
    $.ajax 
     url: 'activity/:id', 
     method: delete, 
     success: function(data) { REMOVE ELEMENT IN HERE } 
     error: alert('this didnt work'); 
    }) 
})