javascript - rails : Delete nested attribute while updating entry

标签 javascript jquery ruby-on-rails ruby

我有一个带有嵌套属性的表单,您可以在其中动态添加和删除属性(表单允许您单击“添加爱好”和“删除爱好”链接......用户有爱好,并且在输入他的个人资料时他可以添加一个、两个、五个或五十个爱好)。

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 似乎不能删除数据库...

更新

这是我迄今为止最好的尝试...

   ...
  ...
  <%= 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”作为用户的 ID.....嗯??

这是日志输出:

Started GET "/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):

最佳答案

您可以使用 Jquery 调用 Ruby 中的函数来为您完成:

Javascript:

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

路线(route.rb):

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

应用程序 Controller (application_controller.rb):

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

关于javascript - rails : Delete nested attribute while updating entry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39859967/

相关文章:

javascript - 相同的选择器单击添加和删除

javascript - 精确匹配字符串

javascript - 停止 AutoPostBack 复选框的事件传播

javascript - 比较表单中的两个日期

ruby-on-rails - 设计..首次登录后应要求更改密码

javascript - Angular 2双向数据绑定(bind)冗余 setter 调用

javascript - 评估JavaScript在WkWebview上缓慢(非常慢)地绘制数据

javascript - 不使用 jquery 实现 Deferred 对象

ruby-on-rails - 如何在 circleCI 中设置 ruby​​ 版本?

ruby-on-rails - 使用 Capistrano 在 Dreamhost 上部署 Rails 3