【发布时间】:2013-03-09 23:47:51
【问题描述】:
我对 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 保存到数据库中的行 (place = Place.save($scope.newPlace))。我想要地点的 id,所以我可以将它附加到所有动态构建的电话上(因为电话有一个指向地点的 place_id 的 FK)。但是,如果我在控制台中输入 place.id,我会收到一条未定义的消息。 place.name 将返回该地点的名称,但 id 不起作用。但是,如果我查看 console.log 位置,我会看到返回并填充了 id 字段。
2) 如何获取地点 JSON 对象的 id 字段?我几乎肯定这是可能的,因为 Chrome 的控制台返回 id 字段但 place.id 不会给我任何东西。
提前感谢您的帮助。非常感谢。
【问题讨论】:
-
location是错误的变量名,可能会与window.location发生冲突。对 javascript 保留关键字进行网络搜索 -
感谢您的提醒。位置实际上并不是我正在使用的变量。我只是将它用于示例。
-
也有点令人困惑,因为我相信您使用
Location作为对象中真实地址字段的引用,而不是浏览器location或角度$location,它们与url相关.所以不完全确定你指的是什么 -
谢谢。我已将 Location 变量替换为 Place 以减少混乱。
标签: ruby-on-rails json angularjs nested-forms