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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

AngularJS

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

Q&A

解決済

1回答

2111閲覧

Rails4とAngularJSを組み合わせてタスクアプリを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

AngularJS

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

0グッド

0クリップ

投稿2014/11/16 03:25

AngularJSで簡単なタスクアプリを作成しました。
コードは以下の通りです。

index.html

lang

1<!DOCTYPE html> 2<html lang="ja" ng-app> 3<head> 4 <meta charset="UTF-8"> 5 <title>TaskApp</title> 6 <script src="http://code.angularjs.org/angular-1.0.1.min.js"></script> 7 <script src="myscript.js"></script> 8 <style> 9 .done-true { 10 color:gray; 11 text-decoration:line-through; 12 } 13 </style> 14</head> 15<body> 16 <h1>Todo list</h1> 17 <div ng-controller="mainCtrl"> 18 <p>Finished Task: {{getDoneCount()}} / {{tasks.length}} 19 <button ng-click="deleteDone()">Delete Finished</button> 20 </p> 21 <ul> 22 <li ng-repeat="task in tasks"> 23 <input type="checkbox" ng-model="task.done"> 24 <span class="done-{{task.done}}">{{task.body}}</span> 25 <a href ng-click="tasks.splice($index,1)">[x]</a> 26 </li> 27 </ul> 28 <form ng-submit="addNew()"> 29 <input type="text" ng-model="newTaskBody"> 30 <input type="submit" value="add"> 31 </form> 32 </div> 33</body> 34</html>

myscript.js

lang

1var mainCtrl = function($scope) { 2 $scope.tasks = [ 3 {"body":"do this 1", "done":false}, 4 {"body":"do this 2", "done":false}, 5 {"body":"do this 3", "done":true}, 6 {"body":"do this 4", "done":false} 7 ]; 8 $scope.addNew = function() { 9 $scope.tasks.push({"body":$scope.newTaskBody,"done":false}); 10 $scope.newTaskBody = ''; 11 } 12 $scope.getDoneCount = function() { 13 var count = 0; 14 angular.forEach($scope.tasks, function(task) { 15 count += task.done ? 1 : 0; 16 }); 17 return count; 18 } 19 $scope.deleteDone = function() { 20 var oldTasks = $scope.tasks; 21 $scope.tasks = []; 22 angular.forEach(oldTasks, function(task) { 23 if (!task.done) $scope.tasks.push(task); 24 }); 25 } 26}

このアプリをRailsと組み合わせたいのですが、Rails上でAngularJSを導入する方法が分かりません。
イメージとしては、フロントサイドをAngularJSで、サーバーサイドをRailsという感じです。

初歩的な質問ですがよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

導入のために何から始めればいいかわからないようであれば、「Rails AngularJS」で検索するとたくさん情報が出てくるので見てみてください。

中でもAngularJSとRailsの丁度良い関係を探るはサンプルで簡単なTODO管理のアプリを公開しているので参考になると思います。

投稿2014/11/19 01:25

sho_cs

総合スコア3541

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

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

退会済みユーザー

退会済みユーザー

2014/11/20 16:03

返信が遅くなってしまい申し訳ございません。 教えていただいたurlを参考にRailsとAngularJSを組み合わせる際のフォルダとコントローラーの振り分けを考えながら試行錯誤で実装してみました。 ①新規作成 ```ruby rails new TaskApp cd TaskApp ``` ②rails g scaffold Task body:string done:boolean ③Gemfileを編集 以下を追加 gem 'bootstrap-sass' gem 'angularjs-rails' gem 'angular-ui-bootstrap-rails' 以下をコメント #gem 'turbolinks' 以下をコメントアウト gem 'therubyracer', platforms: :ruby ④bundle intall ⑤TaskApp/app/assets/javascripts/application.jsを以下のように編集 ```ruby //= require jquery //= require jquery_ujs //= require angular //= require angular-route //= require angular-resource //= require angular-ui-bootstrap-tpls //= require ./angular/app //= require_tree ./angular ``` ⑥TaskApp/app/assets/stylesheetsの下に「costom.css.scss」ファイルを新規作成 以下を追加 ```ruby @@import "bootstrap"; ``` ⑦TaskApp/config/routes.rbを編集。 ```ruby resources :tasks root :to => "layouts#index" ``` ⑧コントローラー作成(viewを表示するためのコントローラー) rails g controller layouts index ⑨TaskApp/app/controllers/tasks_controller.rbを編集。以下を追加 render "layouts/application" ⑩TaskApp/app/assetsの下にtemplatesフォルダを新規作成。  さらにこの下にtasksフォルダを新規作成。  このフォルダの下にindex.htmlを作成。 ⑪TaskApp/app/assets/templates/tasks/index.htmlを以下のように編集 ```ruby <h1>Todo list</h1> <div ng-controller="TasksIndexCtrl"> <p> Finished Task: {{getDoneCount()}} / {{tasks.length}} <button ng-click="deleteDone()"> Delete Finished </button> </p> <ul> <li ng-repeat="task in tasks"> <input type="checkbox" ng-model="task.done"> <span class="done-{{task.done}}">{{task.body}}</span> <a href ng-click="tasks.splice($index,1)">[x]</a> </li> </ul> <form ng-submit="addNew()"> <input type="text" ng-model="newTaskBody"> <input type="submit" value="add"> </form> </div> ``` ⑫TaskApp/app/assets/javascriptsの下にapp.js.erbを新規作成。  以下のコードを書く ```ruby var app = angular.module("Tasks", ['ngRoute','ngResource']); app.config(function($routeProvider) { $routeProvider .otherwise({ templateUrl: "<%= asset_path('tasks/index.html') %>", controller: "TasksIndexCtrl" }) }); ``` ⑬TaskApp/app/assets/javascriptsの下にangularフォルダを作成  さらにこの下にcontrollersフォルダを作成  このフォルダの下にTasksIndexCtrl.jsを新規作成。 ⑭TaskApp/app/assets/javascripts/controllers/TasksIndexCtrl.jsに以下のコードを書く ```ruby app.controller("TasksIndexCtrl", function($scope,$resource) { var rtn = $resource('/tasks.json'); $scope.tasks = rtn.query(); $scope.addNew = function() { $scope.tasks.push({"body":$scope.newTaskBody,"done":false}); $scope.newTaskBody = ''; } $scope.getDoneCount = function() { var count = 0; angular.forEach($scope.tasks, function(task) { count += task.done ? 1 : 0; }); return count; } $scope.deleteDone = function() { var oldTasks = $scope.tasks; $scope.tasks = []; angular.forEach(oldTasks, function(task) { if (!task.done) $scope.tasks.push(task); }); } }); ``` ⑮TaskApp/app/controllers/tasks_controller.rbのindexアクションの所を以下のように編集 ```ruby respond_to :json def index @tasks = Task.all respond_with @tasks end ``` ⑯TaskApp/app/views/layouts/application.html.erbを編集 ```ruby <!DOCTYPE html> <html ng-app="Tasks"> <head> <title>TaskApp</title> <%= stylesheet_link_tag 'application', media: 'all' %> <%= javascript_include_tag 'application' %> <%= csrf_meta_tags %> </head> <body> <div ng-view></div> #ここに結果を出す </body> </html> ``` ⑰TaskApp/app/views/tasks/index.htmlを削除 ⑱http://localhost:3000にアクセス おかげさまで解決できました。 ありがとうございました☆
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問