【问题标题】:Nested form trouble using Rails and AngularJS使用 Rails 和 AngularJS 的嵌套表单问题
【发布时间】: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


【解决方案1】:

我会尝试这样的:

$scope.addPlace = ->
  place = Place.save($scope.newPlace) ->
    $scope.newPlaceId = place.id
  console.log place
  $scope.newPlace = {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2012-10-11
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多