我对 js 和 Angular 还很陌生,但是在观看了 Ryan Bates 在 Rails+AngularJS 上的 railscast(http://railscasts.com/episodes/405-angularjs?autoplay=true)之后,我试图让 Rails 应用程序正常工作。
我相信我想做的事情相当简单:我有一个 Place 模型,其中包含许多电话,并且我希望能够在创建新地点时动态添加和保存电话。这种类型的嵌套表单仅在 Rails 中相当容易(js 仅在用户添加电话时创建新的字段元素),但我想在 Angular 中执行此操作。
我想我的问题分为两个:1)在 Rails+AngularJS(甚至一般的表单)中创建嵌套表单的最佳实践是什么?现在我通过 JSON 将每个模型传递给 Angular,但这是最好的方法吗?
我的第二个问题是指以下代码。
我试图这样做,我能够以角度保存一个地方:
places_controller.rb
respond_to :json
def create
respond_with Place.create(params[:place])
end
_form.html.erb
<div class="container-fluid" ng-controller="PlaceCtrl">
<form ng-submit="addPlace()">
<div class="row-fluid">
<div class="span2"><label>Name</label></div>
<div class="span8"><input type="text" class="input-xlarge" ng-model="newPlace.name"></div>
</div>
<input type="submit" class="btn" value="Add">
</form>
</div>
place.js.coffee
app = angular.module("test", ["ngResource"])
app.factory "Place", ($resource) ->
$resource("/places/:id", {id: "@id"}, {update: {method: "PUT"}})
app.factory "Phone", ($resource) ->
$resource("/phones/:id", {id: "@id"}, {update: {method: "PUT"}})
@PlaceCtrl = ($scope, Place, Phone) ->
$scope.addPlace = ->
place = Place.save($scope.newPlace)
console.log place
$scope.newPlace = {}
在 place.js.coffee 中,我可以将 Place 保存到 DB 行中(place = Place.save($scope.newPlace))。我想要地点的 id,所以我可以将它附加到所有动态构建的电话上(因为电话有一个指向地点的 place_id 的 FK)。但是,如果我在控制台中输入 place.id,我会收到一条未定义的消息。place.name 将返回该地点的名称,但 id 不起作用。但是,如果我查看 console.log 位置,我会看到返回并填充了 id 字段。
2) 如何获取地点 JSON 对象的 id 字段?我几乎肯定这是可能的,因为 Chrome 的控制台返回 id 字段但 place.id 不会给我任何东西。
预先感谢您的帮助。我非常感激。