私はjsとangularにかなり慣れていませんが、Rails +AngularJSでRyanBatesのrailscastを見た後にRailsアプリを動作させようとしていました(http://railscasts.com/episodes/405-angularjs?autoplay=true)。
私がやりたいことはかなり単純だと思います。多くの電話があるPlaceモデルがあり、新しいPlaceを作成するときに電話を動的に追加および保存できるようにしたいと考えています。このタイプのネストされたフォームは、Railsだけでかなり簡単です(ユーザーが電話を追加したときにjsが新しいフィールド要素を作成するだけです)が、Angularでこれを実行したいと思います。
私の質問は2つに分かれると思います:1)Rails + AngularJS(または一般的なフォーム)でネストされたフォームを作成するためのベストプラクティスは何ですか?現在、すべてのモデルをJSON経由でAngularに渡していますが、これが最善の方法ですか?
私の2番目の質問は、次のコードに関するものです。
私はこれを試みましたが、場所を角度で保存することができます:
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は私に何も与えません。
よろしくお願いします。大変感謝しております。