Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在find()生成的列表上使用Rails中的sortable_元素_Ruby On Rails_Ruby_Activerecord_Scriptaculous_Jquery Ui Sortable - Fatal编程技术网

Ruby on rails 在find()生成的列表上使用Rails中的sortable_元素

Ruby on rails 在find()生成的列表上使用Rails中的sortable_元素,ruby-on-rails,ruby,activerecord,scriptaculous,jquery-ui-sortable,Ruby On Rails,Ruby,Activerecord,Scriptaculous,Jquery Ui Sortable,我试图使用scriptaculous助手方法sortable_元素在Rails应用程序中实现拖放式可排序列表。虽然视图的代码看起来很简单,但我真的不太确定在控制器中编写什么来更新“position”列 以下是我的观点,“\u show\u related\u pgs.erb”: “/interests/peer\u group\u map”,:collection=>@maps,:as=>:related\u pg%> {:action=>:resort\u related\u pgs},:

我试图使用scriptaculous助手方法sortable_元素在Rails应用程序中实现拖放式可排序列表。虽然视图的代码看起来很简单,但我真的不太确定在控制器中编写什么来更新“position”列

以下是我的观点,“\u show\u related\u pgs.erb”:

    “/interests/peer\u group\u map”,:collection=>@maps,:as=>:related\u pg%>
{:action=>:resort\u related\u pgs},:handle=>“拖动”)%%>
下面是部分内容中的相关行,“interests/peer\u group\u map.erb”

  • Scriptaculous UI魔术可以很好地处理这些问题,但我不确定如何更改db中的“位置”列以反映这一点。我是否应该将集合@maps传递回控制器,并告诉它遍历该集合,并在每个集合中递增/递减属性“position”?如果是这样的话,我怎么知道哪个项目被上移了,哪个项目被下移了?我在生成的html中找不到任何使用Chrome开发工具的特定内容

    在每次重新排序之后,我还需要重新呈现集合@maps,因为位置是在每个感兴趣的名称旁边打印出来的(我使用它作为我在上面对sortable_元素()的调用中指定的“句柄”)——尽管这应该很简单

    有什么想法吗

    谢谢,
    -e

    我通常在控制器中创建一个排序操作,如下所示:

    def sort
      order = params[:my_ordered_set]
      MyModel.order(order)
      render :nothing => true
    end
    
    不要忘记添加路线:

    map.resources :my_model, :collection => { :sort => :put }
    
    现在,在MyModel上,我添加了一个类方法,用一个查询更新所有已排序的记录(我认为这只适用于mysql):


    单查询方法来自。

    谢谢-我找到一个railscast解释了这一点,我对它做了一些修改(给params一个字符串而不是:this_thing,以便保留变量div名称)。但是这个“一次更新”的东西看起来真的很快/有用/酷,谢谢!你能发布railscast的url吗?
    def sort
      order = params[:my_ordered_set]
      MyModel.order(order)
      render :nothing => true
    end
    
    map.resources :my_model, :collection => { :sort => :put }
    
    def self.order(ids)
      update_all(
        ['ordinal = FIND_IN_SET(id, ?)', ids.join(',')],
        { :id => ids }
      )
    end