Ruby on rails Rails 3.0.10-嵌套路线工作不正常

Ruby on rails Rails 3.0.10-嵌套路线工作不正常,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,页面底部的控制器代码注册表 我有一个简单的rails嵌套项目,我正在练习,我遇到了一个似乎无法发现的问题 当我访问url:localhost:3000/authors/1/books时,我得到的是所有的书,而不是id=1的作者对应的书 以下是我的一些代码: 我有一个作者模型和控制器,还有一本书作者和控制器: class Author < ActiveRecord::Base has_many :books end class Book < ActiveRecord::Base

页面底部的控制器代码注册表

我有一个简单的rails嵌套项目,我正在练习,我遇到了一个似乎无法发现的问题

当我访问url:
localhost:3000/authors/1/books
时,我得到的是所有的书,而不是id=1的作者对应的书

以下是我的一些代码:

我有一个作者模型和控制器,还有一本作者和控制器:

class Author < ActiveRecord::Base
  has_many :books
end


class Book < ActiveRecord::Base
  belongs_to :author
end
以下是书籍的迁移:

class CreateBooks < ActiveRecord::Migration
  def self.up
    create_table :books do |t|
      t.string :title
      t.integer :author_id

      t.timestamps
    end
  end

  def self.down
    drop_table :books
  end
end
但是,当我尝试这个url时,我只得到了所有书籍的列表。不是与适当作者相对应的书

另外,我将控制器设置为返回JSON,当我放入
localhost:3000/authors.JSON
时,它返回正确的JSON对象,但当我放入
localhost:3000/authors/1/books.JSON
时,它返回'null'

以下是我当前数据库列表的屏幕截图,显示数据确实存在:

您能看到可能导致问题的原因吗???如果您需要,我可以提供更多代码。


编辑

运行
rails console
后,我得到了正确的数据-因此我不确定为什么路由仍然不起作用:

irb(main):002:0> Author.find(1).books
=> [#<Book id: 1, title: "Carrie", author_id: 1, created_at: "2012-01-08 21:20:57", updated_at: "201
2-01-08 21:20:57">]
irb(main):002:0>作者.查找(1).书籍
=> [#]
以下是完整路线的要点:

这是图书管理员:

这是作者控制器:


抱歉,我刚刚意识到我遗漏了最上面的原始问题-我得到的是书籍的全部列表,而不是作者的列表-已更正您需要在控制器中向我们显示您的索引操作。我猜你有本书。所有。。。你需要

@author = Author.includes(:books).find(params[:author_id])
你也可能想要

@books = @author.books
同样,在你的展示方法中,确保你做到了这一点

@author = Author.find(params[:author_id])
@book = @author.books.find(params[:id])
而不是

@book = Book.find(params[:id])

打开rails控制台并键入
Author.find(1).books
,会发生什么?你能展示一些控制器代码吗?你能确认所有图书的查询都是@author.books吗?我们能看到控制器代码吗?你也能发布所有的路由(如果你愿意的话,把它放在Git摘要中),以防发生冲突或奇怪的事情吗?查看
development.log
文件中加载
/authors/1/books
的行也会很有帮助,这样我们就可以看到实际调用和呈现了哪些视图/操作。特别是图书控制器中的
索引
操作。感谢您的反馈。我在问题底部的编辑部分包含了控制器代码的GIST。我尝试了你的代码,但现在当我转到url时,我得到了nil:NilClass的:undefined方法'books'。有什么想法吗?对不起,我换了一条线。我需要在books变量之前列出修改后的author实例变量。谢谢你的帮助!
@books = @author.books
@author = Author.find(params[:author_id])
@book = @author.books.find(params[:id])
@book = Book.find(params[:id])