我收到一个错误:No route matches {:action=>"sort", :controller=>"links"}
我正在适应一个非嵌套示例,并且无法确定嵌套路由。
现在,我的路线如下所示:
resources :groups do
resources :navbars do
resources :links do
collection { post :sort }
end
end
post :add_user, on: :member
end
我正在从 navbar>show 渲染一组链接:
= render partial: 'links/link', collection: @navbar.links
这是集合,链接>_link.html.haml:
%ul#links{"data-update-url" => sort_group_navbar_links_url}
- @links.each do |faq|
= content_tag_for :li, link do
%span.handle [drag]
= link.method_name
= link.code
= link.button
= link.text
= link_to 'Edit Link', edit_group_navbar_link_path(@group, @navbar, link), class: 'btn btn-mini'
= link_to 'Delete', group_navbar_link_path(@group, @navbar, link), data: { confirm: 'Are you sure?' }, method: :delete, class: 'btn btn-mini'
我的 links_controller 具有排序操作:
def sort
params[:link].each_with_index do |id, index|
Link.update_all({display_order: index+1}, {id: id})
end
render nothing: true
end
因为我的链接集合是从 navbar>show 页面呈现的,所以我不清楚我的排序操作应该放在哪里(在 links_controller 或 navbars_controller 中)。
我的 navbars_controller 定义了@links:
def show
@links = @navbar.links.order("display_order")
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @navbar }
end
end
这也是很好的衡量标准的 js (links.js.coffee):
jQuery ->
$('#links').sortable
axis: 'y'
handle: '.handle'
update: ->
$.post($(this).data('update-url'), $(this).sortable('serialize'))
也许最后一行也需要工作以包括路线?
我正在使用rails 3.2。