Ruby on rails 在find()生成的列表上使用Rails中的sortable_元素
我试图使用scriptaculous助手方法sortable_元素在Rails应用程序中实现拖放式可排序列表。虽然视图的代码看起来很简单,但我真的不太确定在控制器中编写什么来更新“position”列 以下是我的观点,“\u show\u related\u pgs.erb”: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},:
{: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