カテゴリー : Ruby

[Ruby] 軽量フレームワーク Sinatra 入門に役立つサイトまとめ

Rubyの 軽量フレームワーク Sinatra を始めるときに役立つリンクをまとめてみました。(随時更新予定)

公式

・公式:Sinatra はてなブックマーク - Sinatra

・日本語サイト:Sinatra: README (Japanese) はてなブックマーク - Sinatra: README (Japanese)
 

入門記事

Ruby Freaks Lounge:第7回 小規模Webアプリのためのフレームワーク,Sinatra|gihyo.jp … 技術評論社 はてなブックマーク - Ruby Freaks Lounge:第7回 小規模Webアプリのためのフレームワーク,Sinatra|gihyo.jp … 技術評論社

ウノウラボ by Zynga Japan: Sinatra気に入った はてなブックマーク - ウノウラボ by Zynga Japan: Sinatra気に入った
 

Sinatraでアプリ作成

Ruby Freaks Lounge:第9回 SinatraとSequel・Hamlで掲示板アプリを作る|gihyo.jp … 技術評論社 はてなブックマーク - Ruby Freaks Lounge:第9回 SinatraとSequel・Hamlで掲示板アプリを作る|gihyo.jp … 技術評論社
 

Sinatraソースコードリーディング

Sinatraのソースコードを読んだ – r7kamura’s Hakolog はてなブックマーク - Sinatraのソースコードを読んだ - r7kamura's Hakolog
 

以上です。

[Ruby] DataMapperで利用できるデータ型

Ruby用 ORM である DataMapper で利用できるデータ型を調べたのでメモ。

DataMapperで利用できるデータ型(Available Types)

DM-Cpre は以下のプリミティブ型をサポートしています。

(DM-Core supports the following ‘primitive’ data-types.)

  • Boolean
  • String
  • Text
  • Float
  • Integer
  • Decimal
  • DateTime, Date, Time
  • Object, (marshalled)
  • Discriminator
  • Binary

・引用元:DataMapper – Properties はてなブックマーク - DataMapper - Properties

[Rails] AbstractController::DoubleRenderError

Ruby on Rails 3.1 にて、AbstractController::DoubleRenderError というエラーが発生しました。

■ エラー内容

Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like “redirect_to(…) and return”.

下記のように、複数 render 処理が実行させるとエラーになります。

render :index
render :show # ここまで処理されて render 重複エラー

render処理の後に、そこで動作を終了させたい場合は return を書かなければいけません。

render :index and return # ここで処理が終了
render :show # ここは処理されない

以上です。

【参考】

ruby on rails – AbstractController::DoubleRenderError that shouldn’t be – Stack Overflow はてなブックマーク - ruby on rails - AbstractController::DoubleRenderError that shouldn't be - Stack Overflow

[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] Timeオブジェクトの表示形式を変更する方法

Rubyにて、Timeオブジェクトの表示形式を変更する方法を調べたのでメモ。

Time.now.strftime("%Y-%m-%d %H:%M:%S") #=> "2011-11-13 00:31:21"

例えば、PostgreSQLのtimestamp型をdate型の値のように表示したいとします。

eventテーブルのstart_atレコードがtimestamp型だとすると、以下のように書けばOKです。

@event.start_at.strftime("%Y-%m-%d") #=> "2011-11-13"

以上です。

【参考】

逆引きRuby – 日付と時刻 はてなブックマーク - 逆引きRuby - 日付と時刻

[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