Ruby on Railsの最もシンプルなフリーランスボード

私はあなたが既にRoRに最低限慣れているだけで、それに対して何かをしようとしたと思います。 この資料は、OpenIDを介した最も単純なユーザー認証、および長い間MongoDBを試してみたかったが、どこから始めればよいかわからなかったユーザーにとって興味深いものになります。



以下を使用します。





プロジェクト作成



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を表示します
 = link_to @project.user.openid_identity, @project.user.openid_identity
      
      



したがって、アーティストがプロジェクトに興味を持っている場合、Facebook、VKontakte、またはLiveJournalのプロフィールから顧客に連絡できます。



ここに、最小限の機能を備えたそのようなメッセージボードがあります。 管理パネル、フィードバックとレビュー、プロファイルなどが必要です。 しかし、これは大企業にとって最初の小さな一歩かもしれません。



重要ではないと思われる編集を一部省略したため、 bitbucket.org / nleo / lancemineリポジトリが必要になる場合があります



RoRドキュメントの翻訳

Ruby on Railsチュートリアル:例でRailsを学ぶ

InheritedResources

モンゴイド



All Articles