Ruby on Railsの新機能の概要

まず、Rails 2.3.8に注意を払います。多くの人が聞いたことはありますが、具体的な変更点を誰もが知っているわけではありません。 ちなみに、主な革新はバージョン2.3.6で発生し、.7および.8バージョンはエラーのみを修正しました。



だから、私にとっての変更のリストは個人的にはとても楽しいものであり、それを完全には開示せず、最も興味深いものだけを検討します。



1. Flashが作り直されました。アラートと通知の2つの基本タイプを使用することをお勧めします。 また、リダイレクトで使用することもできます。

これがどうだったかです:

flash [ :notice ] = ' '

redirect_to @article




そして、どうすれば今書くことができます:

redirect_to ( @article, :notice => ' ' )



独自のタイプのフラッシュ、たとえばflash [:error]がある場合、リダイレクトへの追加が失敗することを考慮する価値があります。



2. MySQLデータベースのユーザー向けに、非常に便利な革新がいくつか追加されました。

-これで、インデックスの長さを指定できます。

add_index ( :accounts , :name , :name => 'by_name' , :length => 10 )

# => CREATE INDEX by_name ON accounts(name(10))



add_index ( :accounts , [ :name , :surname ] , :name => 'by_name_surname' , :length =>

{ :name => 10 , :surname => 15 } )

# => CREATE INDEX by_name_surname ON accounts(name(10), surname(15))






-add_およびchange_columnメソッドは、パラメーターをサポートするようになりました:first => true、および:after =>:column。 以前は、テーブルの最後に新しい列を追加していましたが、現在、それらを配置する場所を明示的に指定できます。

add_column :comments , :post_id , :integer , :first => true





3.標準のレールテストでテストを使用する場合、新しいassert_blankおよびassert_presentメソッドが役立ちます。 最初はオブジェクトを空の文字列と比較し、2番目はその存在をチェックします。



4.オブジェクトが存在し、空の文字列ではない場合はオブジェクト自体を返し、それ以外の場合はnilを返すオブジェクト#プレゼンス関数が追加されました。 また、さまざまなパラメーターのいずれかを選択するのに非常に便利です(構文糖の愛好家):

region = params [ :state ] . presence || params [ :country ] . presence || 'US'





5. exclude?メソッドがEnumerable型に追加されましたが、これはinclude?メソッドの反対であり、指定されたオブジェクトに要素が含まれていない場合にtrueを返します。
array = [ 'foo' , 'bar' ]

array. exclude ? ( 'boo' ) # => true

array. exclude ? ( 'bar' ) # => false






また、いくつかの興味深い宝石を見失うことはありません。



感覚的なユーザー[リンク]



その目的は非常に単純です-モデルでcurrent_userを使用できます。 モデルはコントローラーのメソッドを妨害しないと誰かが言うだろうが、個人的にこの宝石は私がさまざまな検証を規定したときに私にとって非常に有用だった。 それの使用は非常に簡単です-ApplicationController'eに「include SentientController」を登録するだけです。 認証モジュールがcurrent_userメソッドをサポートしていない場合は、自分で作成する必要があることを忘れないでください。 Restful AuthenticationやAuthlogicなどの一般的なメカニズムでは問題はないはずです。



リクエストレートリミッター[リンク]



アプリケーションが以前ほど小さくなく、ユーザー数が絶えず増えている場合は、セキュリティについて検討する必要があります。 このプラグインは、非常に友好的なユーザー(または潜在的な競合他社)によって行われない可能性のあるあまりにも頻繁な要求から保護します。 以前よりも難しくない:

# config/application.rb

require 'rack/throttle'



class Application < Rails::Application

config. middleware . use Rack::Throttle::Interval

end






次に、リクエストの制限を規定します。

use Rack::Throttle::Daily , :max => 1000 #

use Rack::Throttle::Hourly , :max => 100 #

use Rack::Throttle::Interval , :min => 3.0 #






また、使用するストレージを指定することもできます-GDBM、Memcached、およびRedisがサポートされています。

ただし、このプラグインはRails 3.0+でのみ使用できるため、将来、またはベータレールでアプリケーションを開発している場合にのみ関連します。



CanCan [リンク]



これは、サイト上のユーザーの権利を制限する素晴らしい方法です。

最初に行う必要があるのは、能力クラスを作成することです。これは、models / ability.rbに保存します。

class Ability

include CanCan::Ability



def initialize ( user )

if user. admin ?

can :manage , :all

else

can :read , :all

end

end

end






これは、すべての権限が保存される場所です。

次に、これをビューで使用できます。

<% if can? :update , @article %>

<% = link_to "Edit" , edit_article_path ( @article ) %>

<% end %>






コントローラーでは、ユーザーがアクションを実行する権限を持っていない場合に例外をスローするauthorize!メソッドを使用できます。

def show

@article = Article. find ( params [ :id ] )

authorize! :read , @article

end






例外はインターセプトおよび処理できます。この場合、フラッシュおよびリダイレクトを介してユーザーにアクセスの不足を通知します。

class ApplicationController < ActionController::Base

rescue_from CanCan::AccessDenied do | exception |

# - redirect_to(root_url, :alert => exception.message)

flash [ :error ] = exception. message

redirect_to root_url

end

end






ご覧のとおり、ここで問題は発生しません。すべての優れたものが既に発明されているのに、車輪を再発明するべきではありません。



説明したプラグインのドキュメントの資料を使用し、プラグイン自体はRiding Rails Webサイトで見つかりました



All Articles