Mongoid Sort和update_all

时间:2012-05-30 13:07:59

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid

我有一个jquery sortable在我的模型控制器中调用data-update-url,一切都很好,函数被调用。 我的排序功能

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

现在我正在使用mongoid,我知道在SQL中没有像我一样灵活的方式来做我想做的事情。在用户按照他想要的方式拖动列表中的元素之后,我希望更新位置,以便用户列表的顺序通过会话保持不变。 以上功能是我开始的模板,所以我可以从正确的方向开始(来自railscast) 我的第一个问题是params [:documents] .each_with_index,我的gettt抛出一个

NoMethodError (undefined method `each_with_index' for nil:NilClass):
  app/controllers/documents_controller.rb:16:in `sort'

所以我确定params [:document]不是我想要传递给each_with_index方法的,但我不确定该尝试什么?

更新 document.js.coffee

jQuery ->
  $('#documents').sortable(
    update: ->
      $.post($(this).data('update-url'), $(this).sortable('serialize')));

相应的erb

<ul id="documents" data-update-url="<%= sort_documents_url %>">
  <% @documents.each do |document| %>
    <%= content_tag_for :li, document do %>
      <%= render document %>
    <% end %>
  <% end %>

1 个答案:

答案 0 :(得分:1)

def sort
    params[:documents].each_with_index do |id, index|
      doc = Document.find_by_id(id)
      doc.update_attribute(:position, index) if doc
    end
    render nothing: true
end