ホーム > RoR

RoRのアーカイブ

validatesでデータの内容を確認する

  • 投稿者: admin
  • 2009年1月11日 11:40 AM
  • RoR

validates(バリデーション)

デフォルトの状態では、フォームで入力するフィールドが空の状態であったり、正しくないデータ形式である場合でもそのまま保存出来てしまうので、validatesを定義することでそれらがチェックされるようにする。(Railsではデータベースに書き込む前に必ずモデルを通る)

バリデーションはmodelごとに設定する。

続きを読む

Railsで画像を扱う

Railsで画像を保存したりサイズを変更したりするのに、ImageMagickという画像アプリケーションと、RMagickというライブラリをインストールする。(MacPortsで)

ImageMagick

$ sudo port install ImageMagick

RMagick

$ sudo gem install rmagick

Railsにおける日本語の設定

日本語の設定
Railsで日本語を扱うためには設定が必要。
(特に理由がなければutf8を使用するように)

編集するファイルは作成しているrailsアプリのフォルダにある
config/environment.rb

このファイルの先頭に

$KCODE = "UTF8"

を追加。保存するときにこのファイル自体の文字コードもutf8になっていることを確認。

そしてもう一つ。ブラウザで正しく日本語を表示させるために「Content-Type」のcharsetパラメータで文字コードを指定する。

作成しているrailsアプリの中にある
app/controllers/applycation.rb
を編集する。

このファイル内のApplicationControllerの部分に日本語の設定をすると、これからこのrailsアプリ内で作成するファイル全てにその設定が適用される。全てを以下の内容に書き換えて保存。

# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.

class ApplicationController < ActionController::Base
  helper :all # include all helpers, all the time

	before_filter :set_charset

	private

	def set_charset
		headers["Content-Type"] = "text/html; charset=UTF-8"
	end

  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you're not using the cookie session store
  protect_from_forgery # :secret => '9b4a9add30a953cd2d8adc938704f7a6'
end

Railsにおけるテーブルの生成(scaffoldとmigrate)

  • 投稿者: admin
  • 11:37 AM
  • RoR

scaffold(テーブル定義)
Railsでは、scaffoldを使用してテーブル(定義)を生成する。

$ ruby script/generate scaffold モデル名

モデル名は単数形で最初の文字が大文字(TodoやMemo)。
この命名規則を守っておけば、モデルクラスでわざわざテーブル名を指定しなくてもテーブルを自動的に探し出すことが出来る(Todoモデルなら、自動的にtodosテーブルを)。

モデル名の後ろにtitle:string description:text 等と繋げていくとフィールドの内容が記述されたファイル(マイグレーションファイル)が自動生成される。(db/migrateフォルダ内に数字_create_モデルに対するテーブル名(小文字複数形).rbというファイル)

数字はこのマイグレーションファイルのversion管理の為。モデル名とテーブル名の関係は「Todo = todos」。

このマイグレーションファイル内に記述されている「upメソッド」の内容を実行することで、データベースにテーブル(scaffoldで定義した)を適用する(実際にテーブルを作成する)ことが出来る。

必要に応じてこのマイグレーションファイルのupメソッドの内容を書き換えて、必要な定義を加えていくことも出来る。

migrate(テーブルを生成)
以下のコマンドによりマイグレーションファイルをデータベースに適用して、実際にテーブルを生成する。

$ rake db:migrate

Railsで使用するデータベースの作成

  • 投稿者: admin
  • 11:35 AM
  • RoR

MySQLでデータベースを作成(rake db:createは使用せずMySQLで)
Railsでは、使用環境によってデータベースの切り替えが出来るので、以下の三つのものを作成する。

Railsアプリ名_development(開発用データベース)
Railsアプリ名_test(テスト用データベース)
Railsアプリ名_production(本番用データベース)
※この命名規則はRailsで決められている。

この際に文字コードの指定も行う。(この例ではコマンドの末尾に指定の文字列を追加してutf8を指定する)

以上の点に留意して、以下のコマンドでデータベースを三つ作成する(末尾のセミコロンを忘れないように注意)。ターミナルを立ち上げて
mysql5 -u root -p
でMySQLに接続してから

mysql> create database Railsアプリ名_development default character set utf8;
mysql> create database Railsアプリ名_test default character set utf8;
mysql> create database Railsアプリ名_production default character set utf8;

次に、作成したデータベースのユーザ権限を設定する。

全ての権限を与えるには「grant all」を使用。

例えば、
grant all on office_development.* to ‘rails’@'localhost’;
としたら、ユーザ名がrails、ホストがlocalhostでアクセスしてきたものにすべての権限を与えるという意味。

localhostの部分を「%」にすると、別のネットワークPCからのデータベースアクセスが可能になる。

今回は1台のPCのみで開発することを想定して「localhost」とする。

また、
grant all on office_production.* to ‘rails’@'localhost’ identified by ‘administrator’;
とすると、ユーザ名がrails、ホストがlocalhost、パスワードがadministratorでアクセスしてきたものにすべての権限を与えるという意味になる。(パスワードの部分を空にして「”」としておけば、パスワードは不要になる)

以上に注意した上で、本番用だけにパスワード「hogehoge」を設定(テスト用と開発用には空パスワードで入れるように)して権限を与えるには以下のコマンド。

mysql> grant all on Railsのプロジェクト名_production.* to 'rails'@'localhost' identified by 'hogehoge';
mysql> grant all on Railsのプロジェクト名_test.* to 'rails'@'localhost' identified by '';
mysql> grant all on Railsのプロジェクト名_development.* to 'rails'@'localhost' identified by '';

以上でデータベースの作成は完了。

Windowsでやる場合はgrantするときにpasswordは必須なのかもしれない。なしでやろうとしたらエラーが出て、設定したらうまくいったから。

データベースの設定
Railsアプリと作成したデータベースを接続するために、設定ファイルである「database.yml」を変更する。
作成するRailsアプリのフォルダ内にある > config > database.yml
このファイルに記述されている項目は

adapter:使用しているデータベースドライバ名(今回はmysql)
encoding:使用する文字コード(今回は「utf8」)
database:使用するデータベース名
username:接続するユーザ名
username:接続するユーザ名
host:データベースのホスト

今回は、上記の内容を以下のように変更する。

development、testにおいてはusernameの部分を「rails」に。(データベースユーザ権限を与える際にそうしたので)
productionも同様にusernameの部分を「rails」にし、さらにpassword部分に「hogehoge」と記述。

MacPortsによるRoRの環境構築

Mac OSX LeopardでMacPortsを使って環境構築する。

MacPortsをインストール
http://www.macports.org/install.php

ターミナルの環境変数を追加してMacPortsのパスを通す
http://showzine.info/blog/archives/431

MacPorts自体を最新にアップデート

$ sudo port -v selfupdate

RubyGemsをMacPortsでインストール

$ sudo port install rb-rubygems

RubyをMacPortsでインストール

$ sudo port install ruby

Railsをインストール
そのままgemでインストール、アップデートを行うと最新の開発版が入りrails実行時にエラーが起こるので、まず最初に開発版を含むリポジトリの削除を行い、Rails 2.0.2を入れるようにする。
*URLの最後にスラッシュをつけないように

$ sudo gem sources -r http://gems.rubyonrails.org
$ sudo gem install rails

Railsのセットアップ(開発用ディレクトリを作る)
ターミナルを起ち上げて

$ cd ~/Documents/
$ rails rails-demo

これで/ユーザ名/Documents(書類)/ディレクトリに「rails-demo」というフォルダ(プロジェクトとかアプリケーションとも)が作成される。以降、rails-demoアプリを作成していくには、このフォルダがルートディレクトリになる。

ブラウザで確認
ターミナルで作成した「rails-demo」ディレクトリに移動。

$ cd ~/Documents/rails-demo
$ ruby script/server

を実行すると、簡易WebサーバーのWEBrickが起動する。
この状態でブラウザでlocalhost:3000にアクセスして、Welcome aboard 画面が表示されればrailsのセットアップは完了。

MacPortsで各種パッケージを更新

$ sudo port -d selfupdate ... MacPorts本体とカタログを更新
$ sudo port upgrade installed ... MacPortsでインストールされているパッケージを全て最新版に
$ sudo gem update --system ... RubyGems本体を更新します
$ sudo gem update ... RubyGemsでインストールされているRuby関連パッケージを全て最新版に
$ port installed ... MacPortsでインストールしたもの一覧を確認

restful_authenticationによるユーザ認証を実装

この記事は
restful_authenticationによるユーザ認証を実装
に引っ越しました。

Railsを2.1から2.0.2へ

gettextによる国際化とかユーザ認証のプラグインとか諸々とうまくいかないのがあるので、思い切ってRailsのヴァージョンを2.1から2.0.2に下げることに。

まず現在入っている2.1を以下のコマンドで削除

sudo gem uninstall rails

ヴァージョン2.0.2を指定してインストール

sudo gem install rails -y -v 2.0.2

successfullyとか2.0.2ってバシバシとログ上で確認出来るのに
rails -v でインストールされたRailsのヴァージョンを確認したら「Rails 2.1.0」だって。
なんでやねん。(whichでどこに入ったか確認したら/opt/local/bin/rails)

と思ったら、RubyGemsでインストールされたRailsのヴァージョンを確認するコマンドでは

$ gem list rails

ちゃんと2.0.2になってた。MacPortsで環境作ってて、/opt以下にあるRailsがこうなっているなら目的は果たしたことになるのか。じゃ、もうひとつの2.1はどこに?ま、いっか。

ホーム > RoR

検索
フィード

ページの上部に戻る