我正在创建一个利用 Rails 3 提供 JSON 的 Web 应用程序。我使用 AngularJS'ngResource
与 RESTful 服务器端数据进行交互。
在导轨方面,我有两个模型:流派和书籍。
- 每个流派
has_many
书籍 - 每本书
belongs_to
一个流派 - 在
routes.rb
中,我的资源被列为resources :genres, :books
。它们不是嵌套的。
我相信你知道,这让我可以做一些事情,比如打电话Genre.where(name: "sci-fi").first.books
返回一个数组。
我想从 Rails 控制器和 AngularngResource
工厂做这样的事情。它对我来说正常工作的标准REST
......
但是,我正在尝试定义一个自定义REST
操作,我可以在其中调用类似这样的操作:Genre.books({ id: 1 })
并让它返回一个属于 id 为 1 的类型的书籍数组。
这是我的genres_controller.rb
:
class GenresController < ApplicationController
respond_to :json
...
def books
@genre_books = Genre.where(id: params[:id]).first.books
respond_with @genre_books
end
end
这是我ngResource
的流派 Angular(用咖啡脚本编写):
app = angular.module("ATWP")
app.factory "Genre", ($resource) ->
$resource "/genres/:id",
id: "@id"
,
....
books:
method: "GET"
我试过isArray: true
继续REST
手术无济于事。我只是取回了类型资源本身,而不是属于该类型的一系列书籍。
那么,我错过了什么?首先做一些像我在上面的例子中试图做的事情是一个坏主意吗?任何输入表示赞赏。