私は最後の2週間の角度を学んでいます。フロントエンドのフレームワークで作業するのは本当に面白いと思いますが、2つの別々の完全なアプリケーションを作成する必要はありません。私はあなたにいくつかの質問をした 角度+レールの初心者の質問
- レールuser.animals.whereのような角度でモデル接続(...)
例えばを管理するための最良の方法は何である
私はユーザーモデルを持っています、すべてのユーザーは多くの動物を持っています。 私が表示したいページで ユーザーと動物のリンクテーブルとすべての動物の右テーブル 今は動物のコントローラに2回、すべての動物のために2回の約束をしています。新しいオブジェクトを作成するためのフォームを追加したいのですが、新しいオブジェクトを2つのモデル配列に角度をつけて配置する必要があります。さらに、すべての動物が多くのおもちゃを持つことができ、実際に複雑になる
私はレールコントローラからjsonを送信しなければならず、動物のおもちゃも含めてユーザーIDの配列を表示してから表示します
ng-hide="(animal['users_ids'].includes(user.id)"
私は新しいモデルを作成するときに、私はおもちゃのモデルや動物を更新する必要があります、それは簡単に行うことができますか?
- 角度とレールモデルを変更するときに、角度とレールモデルを同期する最良の方法は何ですか?
x秒ごとにページを更新できますが、それはプロではありません。
私は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");
};
}])
は、常にAngularjsで回避することが役立ちます – amrdruid