カテゴリー : Ruby

[Rails] 2系と3系のルーティング(Routing)の違い

Ruby on Railsの 2系と3系のRoutingの違いを調べたのでメモ。

Simple routes

# Rails 2:
map.connect 'hello_world', :controller => 'posts', :action => 'index'
 
# Rails 3:
match 'hello_world' => 'posts#index'

Resources

# Rails 2:
map.resources :users
 
# Rails 3:
resources :users
# Rails 2
map.resources :games, :member => { :download => :get }, :collection => { :favourites => :get }
 
# Rails 3
resources :games do
  get :download,   :on => :member
  get :favourites, :on => :collection
end
# Rails 3
resources :games do
  member do
    get :download
  end
 
  collection do
    get :favourites
  end
end

Root mappings

# Rails 2
map.root :controller => 'posts', :action => 'index'
 
# Rails 3
root :to => 'posts#index'
# Rails 2
map.namespace :admin do |admin|
  admin.root :controller => 'posts'
end
 
# Rails 3
namespace :admin do
  root :to => "admin/posts#index"
end

Optional params

# Rails 2
map.connect 'posts/:year/:month', :controller => 'posts',
            :month => nil, :requirements => { :year => /\d{4}/ }
 
# Rails 3
match 'posts/:year(/:month)' => 'posts#index', :constraints => { :year => /\d{4}/ }

【参考】

Rails 3: Routing Examples – Mark Connell はてなブックマーク - Rails 3: Routing Examples - Mark Connell

2.0のmap.resourcesのオプション設定いろいろ – ザリガニが見ていた…。 はてなブックマーク - 2.0のmap.resourcesのオプション設定いろいろ - ザリガニが見ていた...。

map.resourcesを試してみる はてなブックマーク - map.resourcesを試してみる

[Rails] ActiveRecord とDBの型の対応関係

Ruby on Rails にて、ActiveRecord とDBの型の対応関係を調べたのでご紹介します。

続きを読む

Ruby on Rails の解説動画・コードがたくさん掲載されている「RailsCasts」

 

Ruby on Rails のTips を動画やコードで分かりやすく解説されている「RailsCasts」がおすすめなのでご紹介します。
 

・公式:Ruby on Rails Screencasts – RailsCasts はてなブックマーク - Ruby on Rails Screencasts - RailsCasts
 

・参考:Ruby on Railsを覚えつつ英語の勉強「RailsCasts」 – MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ はてなブックマーク - Ruby on Railsを覚えつつ英語の勉強「RailsCasts」 - MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ
 

手順が動画で丁寧に説明されているので、かなり役立ってます。ついでに英語の勉強もできちゃうのも良いですよね。
 

[Ruby] RVM の Ruby のバージョンをデフォルトで使うための設定方法

RVM の Ruby のバージョンをデフォルトで使うための設定をしました。

Macに最初からインストールされているRubyのバージョンは 1.8.7 です。

$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

rvmで別途、Rubyのバージョン 1.9.2 をインストールしているのですが、ターミナルを立ち上げる度に rvm use コマンドを実行するのも面倒です。

rvm use コマンドに –default オプションを付けて実行すれば、次からはデフォルトで指定したRubyのバージョンが使える状態になります。

$ rvm use 1.9.2 --default
Using /Users/codenote_mac/.rvm/gems/ruby-1.9.2-p290

以上です。
 

【参考】

RVMのRubyをデフォルトで使用したい – @sugamasao.blog.title # => ”コードで世界を変えたい”

[Rails] Heroku標準のPostgreSQLへのdb:migrateをやり直す方法

Herokuで強制的にdb:migrateをやり直す方法を調べたのでメモ。

まず、HerokuではRails標準のrake db:resetは使えません。

代わりに、pg:resetコマンドで Herokuの標準のpostgresのDBをリセットすることができます。

$ heroku pg:reset --db SHARED_DATABASE_URL

コマンド実行後、確認のためプロンプトが表示されるので、アプリ名を入力するとリセットが実行されます。

ちなみに、SHARED_DATABASE_URLは以下のコマンドで確認できます。

$ heroku console
Ruby console for codenote.heroku.com
>> ENV['DATABASE_URL']
=> "postgres://username:[email protected]/dbname"

・参考:Heroku | Dev Center | PostgreSQL はてなブックマーク - Heroku | Dev Center | PostgreSQL
 

他にも、db:migrateをやり直す方法があり、VERSION=0 を指定することで最初にdb:migrateする前の初期状態に戻すことができます。

(最初にdb:migrateしたときのマイグレーションファイルが存在することが前提)

$ heroku rake db:migrate VERSION=0

また、db:migrate:redo で何回か前の状態(STEP=回数)に戻すこともできます。

$ heroku rake db:migrate:redo STEP=10

以上です。

【参考】

[Rails][Heroku] Herokuで強制的にdb:migrateをやり直す。その2 – mat_akiの日記 はてなブックマーク - [Rails][Heroku] Herokuで強制的にdb:migrateをやり直す。その2 - mat_akiの日記

Herokuで強制的にdb:migrateをやり直す。 – このブログは証明できない。 はてなブックマーク - Herokuで強制的にdb:migrateをやり直す。 - このブログは証明できない。

Ruby on Rails Guides: Migrations はてなブックマーク - Ruby on Rails Guides: Migrations
 

PHP の array_key_exists は Ruby では Hash#key? に対応する

 

PHP の array_key_exists みたいな処理を Ruby では Hash#key? を使って実現するみたいです。
 

■ PHP

1
2
3
$a = array('first' => 1, 'second' => 2);
var_dump( array_key_exists('first', $a) );
// => true

 

■ Ruby

1
2
3
animals = {:sheep => 1, :cow => 2};
puts animals.key?(:cow);
# => true

 
 
ハッシュ内にキーが存在するかどうか調べるメソッドは、includeの他にも、key, has_key, memberなどがあるみたいです。
 

【参考】

Convert PHP array_key_exists() to Ruby | PHP to Ruby はてなブックマーク - Convert PHP array_key_exists() to Ruby | PHP to Ruby

逆引きRuby – ハッシュ はてなブックマーク - 逆引きRuby - ハッシュ
 

[Ruby] インクリメント(Increment)は”++”ではなく”+=1″

Ruby でのインクリメント(Increment)は”++”ではなく”+=1″と自己代入でするみたいです。

PHP でのインクリメント(Increment)

$i = 0;
$i++;

Ruby でのインクリメント(Increment)

i = 0
i += 1

以上です。

[Rails] コントローラの中で View の画像URLを取得する方法

 

Ruby on Railsにて、コントローラの中で View のントローラの中で、ビューの image_path などを取得したいときは view_context を使えばできるみたいです。
 

■ コントローラの例
 

1
2
3
4
5
6
7
8
#-*- encoding: utf-8 -*-
 
class BookController < ApplicationController
  def show
    view_context.image_path('book.jpg')
      # => "http://localhost:3000/images/book.jpg"
  end
end

 

■ application.rb
 

1
2
3
4
5
6
module MyApp
  class Application < Rails::Application
    config.action_controller.asset_host = "http://localhost:3000"
    ...(略)...
  end
end

 

以上です。
 

【参考】

Rails のコントローラの中で View の画像URLを取得する方法 – それはBlog はてなブックマーク - Rails のコントローラの中で View の画像URLを取得する方法 - それはBlog
 

[Rails] redirect_to でリダイレクトできない原因はURLに半角スペースが入っていたせい

 

Railsのメソッド redirect_to で、Facebook認証後のリダイレクト処理をさせていたのですが、ちゃんと動かなくて困っていました。
 

リダイレクトできなかった原因はなんと、URLに半角スペースが入っていたせいでした…
 

1
2
redirect_to @facebook_cookies.url_for_oauth_code(:permissions => "publish_stream, read_stream")
#redirect_to 'https://graph.facebook.com/oauth/authorize?client_id=125635350871368&redirect_uri=http://localhost:3000/&scope=publish_stream, read_stream'

 

“publish_stream, read_stream” の部分の半角スペースが入っていたせいでリダイレクトできていなかったみたいです。
 

文字列で渡すところをうっかり配列で渡すような書き方にしてしまっていました…
 

正しくは以下のように、スペースを入れないで scope に渡すパーミッションを指定します。
 

1
2
redirect_to @facebook_cookies.url_for_oauth_code(:permissions => "publish_stream,read_stream")
#redirect_to 'https://graph.facebook.com/oauth/authorize?client_id=125635350871368&redirect_uri=http://localhost:3000/&scope=publish_stream,read_stream'

 

ちなみに、Facebook API を使うためのライブラリは koalaを使っています。
 

arsduo/koala – GitHub はてなブックマーク - arsduo/koala - GitHub
 

以上です。
 

Rails 3 で root(ルート)を route.rb から変更する方法

 

Rails 3 にて、root(ルート)を route.rb から変更する方法を調べたのでメモ。
 
 

■ root
 

Webアプリのroot「/」に対するrouteは、Rails 3ではrootというディレクティブを使うそうです。
 

例えば、homeControllerのshowアクションをrootにする場合は config/routes.rb に以下のように書くそうです。
 

1
root :to => 'home#show'

 

これだけではまだ、デフォルトページが表示されてしまうので public/index.html をリネーム or 削除すれば、root で任意のページを表示できます。
 

1
$ rm public/index.html

 

ちなみに、Rails3のroutesについては以下の記事に詳しくまとめられています。
 

Rails 3のroutesまとめ はてなブックマーク - Rails 3のroutesまとめ
 

以上です。
 

【参考】

rails2.0でデフォルトのrouteを変更する方法 – Cafe L@ Bebop はてなブックマーク - rails2.0でデフォルトのrouteを変更する方法 - Cafe L@ Bebop