jQuery使用嵌套资源进行排序

时间:2013-11-25 18:54:10

标签: ruby-on-rails jquery-ui

在我的Rails应用程序中,我正在尝试构建一个可排序列表(在RailsCast tutorial之后)。我有一个屏幕,has_many嵌套的内容:

screen.rb:

class Screen < ActiveRecord::Base
  has_many :contents
end

content.rb:

class Content < ActiveRecord::Base
  belongs_to :screen
end

routes.rb中:

resources :screens do
  resources :contents do
    collection { post :sort }
  end
end

在我对屏幕的看法中,我想显示一个可排序的内容列表。

/screens/show.html.erb:

<ul id="content" data-update-url="<%= sort_screen_contents_path(@screen) %>">
  <% @screen.contents.each do |content| %>
    <li><%= content.name %></li>
  <% end %>
</ul>

以及相关的CoffeeScript:

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

当我拖动内容时,我的服务器日志显示它正在传递screen_id作为参数,而不是内容位置:

Started POST "/screens/2/contents/sort" for 127.0.0.1 at 2013-11-25 12:39:21 -0600
Processing by ContentsController#sort as */*
  Parameters: {"screen_id"=>"2"}
  Rendered text template (0.0ms)
Completed 200 OK in 1ms (Views: 0.3ms | ActiveRecord: 0.0ms)

我认为这个问题可能就是我在视图中定义data-update-url的地方,因为我正在传递@screen,但是当你拥有嵌套资源时似乎需要这样做。我该怎么称呼Content#sort行动?问题出在其他地方吗?

1 个答案:

答案 0 :(得分:0)

我认为您可能需要使用数组表示法,因为您的更新网址目前只是传递了screen_id

data-update-url="<%= [:sort, @screen, @screen.contents]