Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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 3 参数未传递到控制器Rails3+;咖啡脚本+;AJAX_Ruby On Rails 3_Jquery_Controller_Coffeescript - Fatal编程技术网

Ruby on rails 3 参数未传递到控制器Rails3+;咖啡脚本+;AJAX

Ruby on rails 3 参数未传递到控制器Rails3+;咖啡脚本+;AJAX,ruby-on-rails-3,jquery,controller,coffeescript,Ruby On Rails 3,Jquery,Controller,Coffeescript,我正在尝试用Rails3和coffeescript实现一个排序列表。我之前有一个路由问题,并且能够用解决它,所以现在我有一个不同的问题,我的数据参数没有传递到服务器 以下是我的看法 #index.html.erb <h1>Listing books</h1> <ul id="books"> <% @books.each do |book| %> <li class="book<%= book.id %>"><sp

我正在尝试用Rails3和coffeescript实现一个排序列表。我之前有一个路由问题,并且能够用解决它,所以现在我有一个不同的问题,我的数据参数没有传递到服务器

以下是我的看法

#index.html.erb 
<h1>Listing books</h1>
<ul id="books"> <% @books.each do |book| %>
  <li class="book<%= book.id %>"><span class="handle">[drag]</span><%= book.name %></li>
<% end %></ul>
<%= link_to 'New book', new_book_path %>
下面是我的控制器

#books_controller.rb
def sort
  @books = Book.all
  @books.each do |book|
    book.position = params['book'].index(book.id.to_s) + 1
    book.save
  end

  render :nothing => true
end
这就是我得到的错误

Served asset /jquery.js - 304 Not Modified (0ms)

Started POST "/books/sort" for 127.0.0.1 at 2012-11-28 17:03:25 +0530
Processing by BooksController#sort as */*
  Book Load (0.2ms)  SELECT "books".* FROM "books" 
Completed 500 Internal Server Error in 2ms

NoMethodError (undefined method `index' for nil:NilClass):
  app/controllers/books_controller.rb:14:in `block in sort'
  app/controllers/books_controller.rb:13:in `each'
  app/controllers/books_controller.rb:13:in `sort'


  Rendered /home/sameera/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_trace.erb (40.8ms)
  Rendered /home/sameera/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered /home/sameera/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.9/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (47.7ms)
所以当我说
p params
,我得到
{“action”=>“sort”,“controller”=>“books”}
,所以它没有一个名为“book”的参数,因此给出了一个零错误,有人能帮我吗

任何帮助都将不胜感激


提前谢谢

这里有几件事出了问题。首先,你的论点有点混乱:

$.post('/books/sort', $(this).data('#books'), $(this).sortable('serialize'))
$.post
需要第二个参数中的数据,因此如下所示:

$.post('/books/sort', $(this).sortable('serialize'))
更有意义

Sortable希望DOM
id
属性采用特定形式:

默认情况下,它通过查看格式为
“setname\u number”
的每个项目的id来工作,并输出类似
“setname[]=number&setname[]=number”
的散列

在Rails控制器中,您希望在
params[:book]
中有一个图书id数组,因此您希望
book[]=id&book[]=id&……
进入您的服务器。这意味着您希望您的
  • 看起来更像这样:

    <li id="book_<%= book.id %>">
    
    然后告诉
    序列化
    查看

    $(this).sortable('serialize', attribute: 'class')
    
    您还应该使用
    表达式
    选项,不要使用HTML:

    $(this).sortable('serialize', attribute: class, expression: /(book)(.+)/)
    

    还有一些其他的安排方式,请参阅以了解更多详细信息。

    我将查看文档。您不能将多个值传递给
    $。当您在CoffeeScript中执行操作时,请发布
    ,并期望它们发送到服务器。您希望
    $(this).数据(“#book”)
    是什么?我没有看到任何设置该数据属性的东西,
    #books
    看起来更像是一个ID选择器,而不是一个数据属性名称。你好@JonathanTran,谢谢你的回答,我将代码更改为$.post('/books/sort',{book:'sample data'},$(this).sortable('serialize'),并设法将字符串示例数据传递给控制器,但是我如何才能将整个
      传递给控制器进行排序!!!thanksHi@muistooshort,你能告诉我如何设置数据属性吗?我在这里尝试的是通过命令$(this.data(“#books”)获取
        数据,正确的方法是什么,非常感谢你的回答:)在
        $(this.data(“#books”)
        中应该是什么?我不明白为什么当
        $(这个)时你会需要它。可排序('serialize')
        应该有你需要的一切。嗨@muistooshort,非常感谢你的回答,我让它工作了;)
        $(this).sortable('serialize', attribute: 'class')
        
        $(this).sortable('serialize', attribute: class, expression: /(book)(.+)/)