カテゴリー : Ruby on Rails

[Rails] タイムゾーン(Time Zone) を日本標準時(JST)に設定する方法

Railsにて、タイムゾーンを 世界協定時(UTC)から日本標準時(JST)に設定する方法を調べたのでメモ。

■ config/environments/production.rb

# time zone
config.time_zone = 'Tokyo'

・参考:タイムゾーンはどのように設定しておこうか… – ザリガニが見ていた…。 はてなブックマーク - タイムゾーンはどのように設定しておこうか... - ザリガニが見ていた...。

[コラム] Ruby on Rails作者 David Heinemeier Hansson へのインタビュー記事 – 小飼弾のアルファギークに逢いたい

先日Twitterで「Rails使いはこの記事ぐらいは読んでおいた方が良いんじゃないかな」というツイートを見掛けたので、該当の記事「Ruby on Rails作者 David Heinemeier Hansson へのインタビュー記事 – 小飼弾のアルファギークに逢いたい」を読みました。
 

■ 小飼弾のアルファギークに逢いたい♥:#2

Ruby on Rails作者 David Heinemeier Hansson(前編) RubyでRailsを書いたわけ|gihyo.jp … 技術評論社 はてなブックマーク - 小飼弾のアルファギークに逢いたい♥:#2 Ruby on Rails作者 David Heinemeier Hansson(前編) RubyでRailsを書いたわけ|gihyo.jp … 技術評論社

Ruby on Rails作者 David Heinemeier Hansson(中編) 37signalsってどんな会社?|gihyo.jp … 技術評論社 はてなブックマーク - 小飼弾のアルファギークに逢いたい♥:#2 Ruby on Rails作者 David Heinemeier Hansson(中編) 37signalsってどんな会社?|gihyo.jp … 技術評論社

Ruby on Rails作者 David Heinemeier Hansson(後編) 「アーキテクト」って言葉を使ったら負け|gihyo.jp … 技術評論社 はてなブックマーク - 小飼弾のアルファギークに逢いたい♥:#2 Ruby on Rails作者 David Heinemeier Hansson(後編) 「アーキテクト」って言葉を使ったら負け|gihyo.jp … 技術評論社
 

書籍「小さなチーム、大きな仕事」を一年ぐらい前に読んでるのですが、働き始めてから読むとまた違った見方ができそうなので、近々、読み返そうと思います。
 

[Rails3.0] scaffoldで出力される削除(Destroy)リンクが動作しないときは、jquery_ujs.js or rails.js が読み込まれているか確認する

Rails3.0にて、scaffoldで出力される削除リンク(Destroy)が動作しないときは、jquery_ujs.js or rails.js が読み込まれているか確認します。

※ 削除リンク(Destroy)は上記の部分です

prototype.jsを使用しなくて、jQueryを使う場合、削除リンクはこのままでは動作しません。

動作させるためには、jquery_ujs.js(rails.js)を読み込む必要があります。

<%= link_to 'Destroy', test_model, :confirm => 'Are you sure?', :method => :delete %>

僕の場合、jquery_ujs.js の役割を確認せずに削除していたのが原因でした。

ちなみに、jquery_ujs.js は Rails3.0 で jQuery を使う設定をするときに一緒に作成されます。

Rails3.0のjQuery対応手順

まず、Gemfileに以下のような記述を追加して、bundleします。

gem 'jquery-rails''

ジェネレータを実行して、不要なファイルの削除と必要なファイルの生成を行います。

$ rails g jquery:install

このジェネレータによって、prototype.js関連の以下のファイルが削除され、

public/javascripts/prototype.js
public/javascripts/effects.js
public/javascripts/dragdrop.js
public/javascripts/controls.js

jQuery関連の以下のファイルが生成されます(jquery-rails 1.0.2の場合はjQuery 1.6がインストールされます)。

public/javascripts/jquery.js
public/javascripts/jquery.min.js
public/javascripts/jquery_ujs.js(各種ヘルパーで生成した要素にイベントハンドラを設定したりするもの。かつてのrails.js)

・引用元:Rails 3.1ではjQueryが標準になるそうなので、すぐに要らない知識になるかもしれませんが、Rails 3.0でのjquery-ra… – Sooey はてなブックマーク - Rails 3.1ではjQueryが標準になるそうなので、すぐに要らない知識になるかもしれませんが、Rails 3.0でのjquery-ra... - Sooey

引用元記事のタイトルにあるように、Rails 3.1ではjQueryが標準になるので、ハマる人はあまりいないと思いますが参考になれば幸いです。

【参考】

rails/jquery-ujs – GitHub はてなブックマーク - rails/jquery-ujs - GitHub

Rails3にjQueryを導入する – ちょりぽんのふがふが日記 はてなブックマーク - Rails3にjQueryを導入する - ちょりぽんのふがふが日記

[Rails] scaffold.css を編集して table を見やすくする

Rails3.1で作成した scafold ファイルの index.html.erb の table を見やすくするために scaffold.css を編集してみました。

表に線があるだけでかなり見やすくなりますね。

■ public/stylesheets/scaffold.css

.scaffold_table {
  border-collapse: collapse;
  border: 1px #DCDCDC solid;
}
 
.scaffold_table th {
  border: 1px #DCDCDC solid;
  padding: 5px;
}
 
.scaffold_table td {
  border: 1px #DCDCDC solid;
  padding: 5px;
}

CSSファイルを編集したら、scafold機能で作成したテンプレートファイルの table タグに class=’scaffold_table’ を追加して、スタイルを反映させます。

■ app/views/books/index.html.erb

<h1>Listing books</h1>
 
<table class='scaffold_table'>
  <tr>
    <th>id</th>
    <th>Title</th>

以上です。

【参考】

スタイルシート[CSS]/テーブル/表の境界線を指定する – TAG index Webサイト はてなブックマーク - スタイルシート[CSS]/テーブル/表の境界線を指定する - TAG index Webサイト

[Ruby on Rails] コントローラの作成と命名規則

Ruby on Railsにて、rails generate コマンドでコントローラを作成するときの命名規則を調べたのでメモ。

コントローラの名前は「CamelCased(キャメルケース)」か「under_scored(アンダースコアード)」のどちらかの方式で指定できます。

■ CamelCased(キャメルケース) の例

$ rails generate controller FacebookUsers

■ under_scored(アンダースコアード) の例

$ rails generate controller facebook_users

結論としては、いずれの方式も作成されるファイル名は「under_scored」の形式となり、作成されるクラス名は「CamelCased」の形式となるみたいです。

【参考】

コントローラの作成と命名規則 – コントローラ – Ruby on Rails入門 はてなブックマーク - コントローラの作成と命名規則 - コントローラ - Ruby on Rails入門
 

[Rails 3.1.0] ActionView::Template::Errror (application.css isn’t precompiled)

Ruby on Rails 3.1.0 にて、アプリケーションを作成してdevelop環境は作らずに、Heroku上のstaging環境でいきなり動かしたら以下のようなエラーが発生しました。

ActionView::Template::Errror (application.css isn't precompiled)

対応策としては、config.assets.compile を true にすればOKです。

■ config/environments/staging.rb

# Don't fallback to assets pipeline if a precompiled asset is missed
# config.assets.compile = false
config.assets.compile = true

以下、stackoverflowに書かれていた説明と自分で翻訳したもの。

By default Rails assumes that you have your files precompiled in the production environment, if you want use live compiling (compile your assets during runtime) in production you must set the config.assets.compile to true. You can use this option to fallback to Sprockets when you are using precompiled assets but there are any missing precompiled files. If config.assets.compile option is set to false and there are missing precompiled files you will get an “AssetNoPrecompiledError” indicating the name of the missing file.

デフォルトの設定によって、RailsはProduction環境でプリコンパイル済みのファイルがあることを想定しているので、もしProduction環境でライブコンパイル(runtime中にアセットをコンパイルすること)を使いたいなら、config.assets.compile を true にしなければならない。プリコンパイル済みファイルが全くないが、プリコンパイル済みのアセットを使おうとしているとき、Sprockets *1 の代替策としてこのオプションを使うことができる。config.assets.compile のオプションが false に設定されていて、プリコンパイル済みのファイルがない場合、存在しないファイル名を指して“AssetNoPrecompiledError”が発生するでしょう。

*1 Sprockets: Rubyで書かれたJavaScriptプリプロセッサで、複数のJavaScriptソースファイルを1つにまとめるのが主な機能

【参考】

rails 3.1.0 ActionView::Template::Errror (application.css isn’t precompiled) – Stack Overflow はてなブックマーク - rails 3.1.0 ActionView::Template::Errror (application.css isn't precompiled) - Stack Overflow

Asset Pipelineを備えたRails 3.1のリリースに向けて、その根幹を担うSprocketsをちょっと触っておくことにした。 – Sooey はてなブックマーク - Asset Pipelineを備えたRails 3.1のリリースに向けて、その根幹を担うSprocketsをちょっと触っておくことにした。 - Sooey

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

[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デザイナー向けブログ
 

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

[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