質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

2995閲覧

AngularJSでcontrollerからserviceに動的に値を渡す方法について

aoshima.natsuki

総合スコア33

CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2015/10/27 11:11

編集2015/10/27 11:50

複数のShopにShelfとItemがそれぞれネストされて繋がっている以下のようなモデル構成のとき、
ngResourceを使ってデータベースにitemを追加(save)する方法についてです。

Shop
└ Shelf
└ Item

Rails側では、レンダリングされたjson "/api/shops/:shop_id/shelfs/:shelf_id/items/:id" を呼び出すAPIに専念させ、Angular側から、serviceクラスのfactoryメソッドでそれを呼んでいます。

このとき、追加するitemに紐づく動的なshop_idとshelf_idの渡し方がわかりません...
「$scope.newItem = { ... }」の中で指定しているのですがどうやら渡せないみたいで困ってます。
なぜかわかる方、おられましたら教えていただいたいです。初歩的な質問ですみませんがよろしくお願いいたします。

《service》

javascript

1angular.module('myApp').factory 'Item', ($resource) -> 2 $resource('/api/shops/:shop_id/shelfs/:shelf_id/items/:id', 3 { shop_id: '13495' }, 4 { shelf_id: '93' }, 5 { update: { method: 'PUT' }})

《controller》

javascript

1angular.module('myApp').controller "shopEdit", ($scope, Shop, Item) -> 2$scope.addItem = (shop, shelf) -> 3 # 保存 4 $scope.newItem = { body: shelf.item.body, shop_id: shop.id, shelf_id: shelf.id } 5 Item.save($scope.newItem) 6 $scope.newItem = newItem 7 return

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$resourceの使い方が違います。

  • $resourceの引数paramDefaultsの渡し方を間違えています
  • $resouceで__作成したクラス__をnewして、作成したインスタンスを$saveしてください

以下のように修正してください。 DEMO

coffeescript

1app= angular.module 'myApp',[ 2 'ngResource' 3] 4 5app 6.factory 'Item',($resource)-> 7 $resource '/api/shops/:shop_id/shelfs/:shelf_id/items/:id' 8 , 9 shop_id: '@shop_id' 10 shelf_id: '@shelf_id' 11 , 12 update: 13 method: 'PUT' 14 15.run (Item)-> 16 item= new Item 17 item.shop_id= 'foo' 18 item.shelf_id= 'bar' 19 item.body= 'baz' 20 21 # /api/shops/foo/shelfs/bar へ、POSTする 22 item.$save() 23 .then (response)-> 24 console.log response # xhrの結果のような、ajaxリクエストの結果が返る 25 console.log item.data # {shop_id: "foo", shelf_id: "bar", body: "baz"} 26

参考

投稿2015/10/27 14:12

horse_n_deer

総合スコア452

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoshima.natsuki

2015/10/28 05:44

さっそくのご回答ありがとうございます。 なるほど、、基本的なところで勘違いしていたようです。 大変助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問