使用 ngResource 在 AngularJS & Rails 中检索关联

Retrieve associations in AngularJS & Rails using ngResource

我有记录 & 类别 型号:

class Record < ActiveRecord::Base
    belongs_to :category
end

class Category < ActiveRecord::Base
    has_many :records
end

Category 模型有一个 name 字段,应该用于显示。我正在使用 ng-repeat 来显示记录,'record.category.name' 导致我的页面中断:

<tr ng-repeat="record in records">
    <td>{{record.category.name)}}</td>
    <td>{{record.description}}</td>
    <td>{{record.created_at | date:'medium'}}</td>
</tr>

我如何才能正确检索“record.category”,以便 'name' 字段可用,如我上面所说?到目前为止,使用 ngResource 还没有填充关联。

我正在使用 ngResource 检索 Record 模型:

            var Record = $resource('/records/:recordId', {
                recordId:'@id',
                format: 'json'
            }, {
                'save': {
                    method: 'PUT'
                },
                'create': {
                    method: 'POST'
                }
            });

            Record.query({
                    account_id: $routeParams.accountId
            }, function(results) {
                    return $scope.records = results;
            });

如何在 AngularJS 中检索此模型,以便关联数据也可用于显示?

感谢任何帮助。

编辑:

index.json.jbuilder

json.array! @records, partial: 'record', as: :record

_record.json.jbuilder

json.(record, :id, :account_id, :user_id, :amount, :date, :description, :is_expense, :category_id, include: [:category])

这实际上不是 Angular 问题,而是 Rails(和 API 设计)问题。我说 API 设计的原因是因为根据用例,客户端获取所有类别并在前端完成工作以将类别与记录匹配可能更有效。也就是说,要完成您想要做的事情,您需要更改 Rails app.

链接答案中的修改代码:

def show
  @record = Record.find(params[:id])
  respond_to do |format|
    format.json { render :json => @record.to_json(:include => :category) }
  end
end

当我做 Rails 时,您可以在 find 调用中做 :include,但我已经有一段时间没有做 Rails 了。我不知道这是否仍然是最好的方法。