2

我收到一个错误: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。

4

0 回答 0