2016-04-09 16 views
0

私は最後の2週間の角度を学んでいます。フロントエンドのフレームワークで作業するのは本当に面白いと思いますが、2つの別々の完全なアプリケーションを作成する必要はありません。私はあなたにいくつかの質問をした 角度+レールの初心者の質問

  1. レールuser.animals.whereのような角度でモデル接続(...)

例えばを管理するための最良の方法は何である

私はユーザーモデルを持っています、すべてのユーザーは多くの動物を持っています。 私が表示したいページで ユーザーと動物のリンクテーブルとすべての動物の右テーブル 今は動物のコントローラに2回、すべての動物のために2回の約束をしています。新しいオブジェクトを作成するためのフォームを追加したいのですが、新しいオブジェクトを2つのモデル配列に角度をつけて配置する必要があります。

さらに、すべての動物が多くのおもちゃを持つことができ、実際に複雑になる

私はレールコントローラからjsonを送信しなければならず、動物のおもちゃも含めてユーザーIDの配列を表示してから表示します

ng-hide="(animal['users_ids'].includes(user.id)" 

私は新しいモデルを作成するときに、私はおもちゃのモデルや動物を更新する必要があります、それは簡単に行うことができますか?

  1. 角度とレールモデルを変更するときに、角度とレールモデルを同期する最良の方法は何ですか?

x秒ごとにページを更新できますが、それはプロではありません。

  1. 私はdeviseとoauthで動作するようにレールと角度を守ってきました。私の構成で動作しますが、解決策は、レール

    Gemfile 
    gem 'devise' 
    gem 'omniauth-facebook' 
    gem 'omniauth-github' 
    gem 'angular_rails_csrf' 
    

固体と安全であるならば、私はわからないが工夫を生成:既存のUserモデル工夫を設定

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:facebook, :github] 

    def self.from_omniauth(auth) 
     where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
     user.provider = auth.provider 
     user.uid = auth.uid 
     user.email = auth.info.email 
     user.password = Devise.friendly_token[0,20] 
     end 
    end 

を設定

をインストールイニシャライザ

config.clean_up_csrf_token_on_authentication = true 

の設定onniauthイニシャライザ

Rails.application.config.middleware.use OmniAuth::Builder do 
     provider :facebook, ENV['APP_ID'], ENV['APP_SECRET'], 
     scope: 'email,public_profile', info_fields: 'email,id,name' 
    end 

はルート

devise_for :users, :controllers => { :omniauth_callbacks => "sessions#create" } 
    get '/auth/:provider/callback', to: 'sessions#create' 

セッションコントローラ

 def facebook 
     @account = User.from_omniauth(request.env["omniauth.auth"]) 
     sign_in @account 
     render 'sessions/create', layout: false 
     end 

     def github 
     @account = User.from_omniauth(request.env["omniauth.auth"]) 
     sign_in @account 
     render 'sessions/create', layout: false 
     end 

アプリ/ビュー/セッション/ create.htmlを設定します。ERB

<p>This view will now self-destruct</p> 
    <script> 
     try { 
      window.opener.$windowScope.handlePopupAuthentication('<%= @provider %>', <%= @account.to_json.html_safe %>); 
     } catch(err) {} 
     window.close(); 
    </script> 

と角度設定

アプリ/資産/テンプレート/ login.html.slim

div.page-header 
     h1 Log In 

    div class="btn dash-subs login-btn" ng-click="authNetwork('facebook')" 
     p Login With Facebook 

アプリ/資産/ javascriptの/認証/ authCtrl.js

angular.module('myAPP') 
     .controller('AuthCtrl', [ 
     '$scope', 
     '$state', 
     'Auth', 
     function($scope, $state, Auth){ 

     $scope.handlePopupAuthentication = function handlePopupAuthentication(network, account) { 
      $scope.$apply(function(){ 
      window.location.reload() 
      }); 
     } 

     $scope.authNetwork = function authNetwork(network) { 
      var openUrl = '/users/auth/' + network 
      window.$windowScope = $scope; 
      window.open(openUrl, "Authenticate Account", "width=500, height=500"); 
     }; 
    }]) 

答えて

0

ng-changeディレクティブを斜めに見て、入力が変更されたときはいつでも欲しい

あなたはドキュメントhereを見つけることができる、とあまりにも

は、あなたが2つの要求ユーザー用と動物のために他のを避けることができ、他の複数の例がある、それがレールにアクティブなモデル・シリアライザを使用することによって回避することができます、それは本当によりよい解決策が常にあることを確認してくださいここで

は、シリアライザのための素晴らしいビデオですあなたはこのパスを通過する場合は、ページを更新railscasts

+0

は、常にAngularjsで回避することが役立ちます – amrdruid

関連する問題