【发布时间】:2013-06-09 14:13:33
【问题描述】:
我正在创建一个利用 Rails 3 提供 JSON 的 Web 应用程序。我使用 AngularJS 的ngResource 与 RESTful 服务器端数据进行交互。
在 Rails 方面,我有两个模型:Genre 和 Book。
- 每种类型
has_many书籍 - 每本书
belongs_to一个流派 - 在
routes.rb中,我的资源被列为resources :genres, :books。它们没有嵌套。
我相信你知道,这让我可以做一些事情,比如调用 Genre.where(name: "sci-fi").first.books 会返回一个数组。
我想从 Rails 控制器和 Angular ngResource 工厂做这样的事情。对于标准的REST 操作,它对我来说工作正常......
但是,我正在尝试定义一个自定义的 REST 操作,我可以在其中调用类似这样的内容:Genre.books({ id: 1 }) 并让它返回一个属于类型为 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
这是我的 Angular ngResource 流派(用咖啡脚本编写):
app = angular.module("ATWP")
app.factory "Genre", ($resource) ->
$resource "/genres/:id",
id: "@id"
,
....
books:
method: "GET"
我尝试将isArray: true 附加到REST 操作无济于事。我只是取回了 Genre 资源本身,而不是属于该 Genre 的一系列书籍。
那么,我错过了什么?首先做一些像我在上面的例子中试图做的事情是一个坏主意吗?任何意见表示赞赏。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 angularjs