拖动行不会保存到数据库

时间:2014-11-13 19:06:23

标签: ruby-on-rails jquery-ui-draggable

我在我的Rails 4应用程序中实现了拖放功能。 我一直在跟随Ryan Bates的教程视频, #147 Sortable Lists (revised)

我可以拖动行,但更改不会保留在数据库中。

在我的视图(app / views / admin / sections / index.html.erb)中,我实现了这样的拖放功能:

<section class="dashboard">
  <%= button_to "Sectie Toevoegen", new_admin_section_path, method: "get" %>
  <table id="sections" class="table-borders">
    <tbody data-update-url="<%= sort_admin_sections_url %>">
    <% @sections.each do |section| %>
      <%= content_tag_for :tr, section do %>
        <td><%= link_to section.title, admin_section_path(section) %></td>
        <td><%= link_to "Aanpassen", edit_admin_section_path(section) %>&nbsp;&nbsp;<%= link_to 'Verwijderen', admin_section_path(section), method: :delete, data: { confirm: "Ben je zeker?" } %>   </td>
        <% end %>
    <% end %>
    </tbody>
  </table>

我不确定是否触发了排序操作(具有更新逻辑)。我的排序操作的代码如下所示:

app/controllers/admin/sections_controller.rb

def sort
  params[:section].each_with_index do |id, index|
    Section.where(id: id).update_all({position: index+1})
  end
  render nothing: true
end

我的路线定义如下:

  namespace :admin do
  ...
    resources :sections do
      collection { post :sort }
    end
  end

调用jquery ui可排序方法中的更新回调(app / assets / javascripts / sections.js.coffee):

jQuery ->
  $('#sections tbody').sortable
    axis: 'y'
    update: ->
      $.post($(this).data('update_url'), $(this).sortable('serialize'))

,我用一个简单的alert()方法检查了这个。此外,当我通过Google Developer Tools控制台查看Javascript时,我发现没有Javascript错误。

我认为问题必须由Rails的质量分配安全性引起。当我拖动开发日志时,在拖动一行时,我看到了以下错误消息:

Started POST "/admin/sections" for 127.0.0.1 at 2014-11-13 20:45:04 +0100
Processing by Admin::SectionsController#create as */*
  Parameters: {"section"=>["3", "4", "6", "2", "5"]}
Completed 500 Internal Server Error in 1ms

NoMethodError (undefined method `permit' for ["3", "4", "6", "2", "5"]:Array):
app/controllers/admin/sections_controller.rb:54:in `section_params'
app/controllers/admin/sections_controller.rb:15:in `create'

我试图通过添加&#39;:position =&gt;来解决这个问题。 []&#39;到我允许的参数列表:

  def section_params
    params.require(:section).permit(:title, :description, :image, :category_id)
  end

但这并不能解决问题。

我的存储库位于: https://github.com/acandael/beautysalonapp2/tree/drag-and-drop

感谢您的帮助,

安东尼

0 个答案:

没有答案