以下を使用します。
- Ruby on Rails 3.2.8
- スリム
- モンゴイド
- ログインザ
プロジェクト作成
rails new lancemine -O -G -T
-O ActiveRecordの使用を拒否します(代わりにMongoid)
-G gitを破棄(Mercurialを使用)
-Tテストの拒否
Gemfileを修正して、次の形式に導きます。
source 'https://rubygems.org' gem 'rails', '3.2.8' gem 'inherited_resources' gem 'slim-rails' gem 'mongoid' group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem 'therubyrhino', :platforms => :mswin gem 'therubyracer', :platforms => :ruby gem 'execjs' gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails'
ここで、必要なgemを追加し、プラットフォームに応じてJSをコンパイルするためのライブラリを指定します。 therubyracerはより高速と見なされますが、winでコンパイルする際に問題があるため、Mozillaエンジンを使用します。
bundle
MongoDBの構成を生成します
rails g mongoid:config
マーキュリアル
バージョン管理システムを使用する場合は、Mercurialをお勧めします。 私の意見では、Gitと同じようにすべてを行いますが、より簡単で論理的です。
一時的で頻繁に変更されるファイルを制御から除外するには、ルートに.hgignoreファイルを作成する必要があります。
db/schema.rb config/mongoid.yml .bundle tmp Gemfile.lock syntax: glob db/*.sqlite3 log/*.log public/uploads/* public/assets/* *.swp *.orig *~
次に、コマンドを実行します。
hg init hg ci -Am "Init"
-Aはすべての新しいファイルを制御下に追加します
-mコミットに関するコメントがコマンドラインで渡されること。
ユーザーモデル
rails gモデルユーザーopenid_identity openid_data:ハッシュステータス
これにより、app / models / user.rbモデルが作成され、フォームに表示されます:
class User include Mongoid::Document include Mongoid::Timestamps field :openid_identity, type: String field :openid_data, type: Hash field :status, type: String has_many :projects end
Mongoidを含める::タイムスタンプは、AR created_atおよびupdated_atから馴染み深い
プロジェクト
rails g scaffodプロジェクトのタイトル本体予算時間
モデルに線を追加します。
include Mongoid::Timestamps belongs_to :user
ビューにも変更を加えました。リポジトリで表示できます。
セッション
そのような登録はありません。Loginzaを介してOpenIDを介してのみログインします。 これを行うには、 loginza.ru/js/widget.jsでスクリプトを接続します。
app / views / layouts / application.html.slim:
doctype html html head title Lancemine = stylesheet_link_tag "application", :media => "all" = javascript_include_tag "application" script src="http://loginza.ru/js/widget.js" type="text/javascript"
ウィジェットを呼び出すには、次のリンクを使用します。
loginza.ru/api/widget?token_url=#{u 'http://localhost:3000/signin'}&providers_set=vkontakte,facebook,livejournal
localhost :3000 / signin-これは、loginzaがログイン後にユーザーをリダイレクトするアドレスです
provider_set-入力が許可されているプロバイダーのリスト。
処理用のコントローラー:
rails gコントローラーセッション:
class SessionsController < ApplicationController require 'net/http' require 'json' def create openid_data = params[:token] openid_data = Net::HTTP.get(URI.parse("http://loginza.ru/api/authinfo?token=#{params[:token]}")) openid_data = JSON.parse openid_data user = User.find_or_create_by(openid_identity: openid_data['identity']) if user.status != 'banned' user.openid_data = openid_data user.save session[:user_id] = user.id redirect_to root_url, :notice => "Logged in!" else redirect_to root_url, :notice => "You blocked!" end end def destroy session[:user_id] = nil redirect_to root_url, :notice => "Logged out!" end end
ここでは、net / httpライブラリを使用して、Loginza POSTが/ signinリクエストで渡したトークンを使用してユーザー情報をリクエストします。 TODO:エラー処理を行う必要があります(Loginzaはエラーを返す場合がありますが、ここでは考慮されていません)。
次に、対応するOpenIDを持つユーザーがデータベース内にあるか、新しいユーザーが作成され、ユーザーIDがセッションに書き込まれます。
それ以外の場合、セッションメカニズムはRailsチュートリアルで説明されているものと同じです。 sessions_helper.rbファイルに注意し、そのメソッドをapplication_controller.rbに追加することをお勧めします。
プロジェクトコントローラー
class ProjectsController < InheritedResources::Base before_filter :signed_in_user, except: [:show, :index] before_filter :correct_user, only: [:update, :edit, :destroy] def show @project = Project.find params[:id] @author = @project.user.id == current_user.id if signed_in? show! end def create @project = Project.new params[:project] @project.user = current_user create! end def index @projects = Project.order_by(:created_at.desc) end private def correct_user @project = current_user.projects.find(params[:id]) redirect_to root_url if @project.nil? end end
このコードは、私がInheritedResourcesを使用しているという点で興味深いものですこのgemは、オブジェクトの標準CRUDアクションを引き受けます。 作成!、表示! -これは、このgemのヘルパーへの呼び出しです。 リンクをたどることをお勧めします。使用方法の詳細な例があります。 さて、before_filterは、プロジェクトを作成して編集するためのアクセスを制限します。
app / views / projects / show.html.slimで著者のOpenIDを表示します
したがって、アーティストがプロジェクトに興味を持っている場合、Facebook、VKontakte、またはLiveJournalのプロフィールから顧客に連絡できます。= link_to @project.user.openid_identity, @project.user.openid_identity
ここに、最小限の機能を備えたそのようなメッセージボードがあります。 管理パネル、フィードバックとレビュー、プロファイルなどが必要です。 しかし、これは大企業にとって最初の小さな一歩かもしれません。
重要ではないと思われる編集を一部省略したため、 bitbucket.org / nleo / lancemineリポジトリが必要になる場合があります
RoRドキュメントの翻訳
Ruby on Railsチュートリアル:例でRailsを学ぶ
InheritedResources
モンゴイド