2016-10-04 4 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 как аргумент (так как я пока не могу его легко извлечь). Но он продолжает использовать строку «delete» как идентификатор пользователя ..... да?

Вот вывод журнала:

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 (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 для каждого вида деятельности и сделать AJAX запрос к вашему бэкэнду API, который обрабатывает его. Он будет выглядеть примерно так:

$('.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'); 
    }) 
}) 
Смежные вопросы