Ruby/Ruby on Rails/QuickStart

1月 1, 2003 · Posted in Ruby, Ruby on Rails · Comment 

どこにでもあるけど、一応。

プロジェクトの作成

empプロジェクトを作成する。

>rails emp
プロジェクト名は何でもok

テーブルの作成

employeesテーブルの作成

CREATE TABLE `employees` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default ”,
`age` int(3) NOT NULL default ’0′,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

キーは、名前id+auto_incrementに設定。
各カラム名はすべて小文字で、区切りがある場合はアンダースコア(_)を使って命名する。
テーブル名は、単語の複数形で表すのが決まりごと。

接続先テーブル情報設定の変更

config/database.ymlを書き換え

development:
adapter: mysql
database: emp
username: root
host: localhost
password:

モデル、コントローラの作成

作成したプロジェクトに移動

>cd c:\rails\emp\

モデル、コントローラを作成する。

>ruby script/generate model employee
>ruby script/generate controller employee

対応するテーブル名を単数形にした名称にする。

コントローラの書き換え

app/controllers/employee_controller.rbを編集。scaffoldを追記。

class EmployeeController < ApplicationController
scaffold :employees
end

WEBrickサーバの起動

>ruby script/server

WEBブラウザでアプリケーションを実行

http://localhost:3000/employee/



Ruby/Ruby on Rails/model/5分でわかるActiveRecord

1月 1, 2003 · Posted in Ruby, Ruby on Rails · Comment 

5分でわかる、ActiveRecord。
例を元に、ActiveRecordの動作を確認。
※Windowsを利用。

準備

-Railsのインストール→[[Ruby/Ruby on Rails/インストール]]
-Railsプロジェクトの作成→[[Ruby/Ruby on Rails/QuickStart]]

テーブルの作成

CREATE TABLE `friends` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(20) NOT NULL default ”,
`age` int(2) NOT NULL default ’0′,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

ここではMySQLを使用。XAMPPを利用するのが手っ取り早い
XAMPP:http://www.apachefriends.org/jp/xampp-windows.html

モデル(ActiveRecord)の作成

コマンドプロンプトを起動(スタート→ファイル名を指定して実行→cmd)。
続いてRailsプロジェクトのフォルダに移動

cd c:\rails\emp

モデルの作成

ruby script/generate model friend

コンソールの起動

コマンドプロンプトから

ruby script/console
と入力してirbを立ち上げる。

検索

Friendsテーブルを検索してみる。
コンソールで以下を入力

friend = Friend.find_all
まだデータがないので[](空のオブジェクト)が表示される。

モデル.find_allは、テーブルに登録されているすべてのレコードを取得するためのメソッド。

レコードの作成

テーブルに対してレコードを作成してみる。

Friend.create

そのままテーブルを検索

friend = Friend.find_all

IDが自動採番されたレコードが、テーブルに追加された。

検索2

追加したレコードを一意に取得してみる

friend = Friend.find(1)

レコードが取得された。
モデル.find(id)で、IDを指定して一意なレコードを取得することができる。

レコードの更新→保存

取得したレコードに値を設定して保存する。

friend.name = "sparky"
friend.age = 38
friend.save

モデル.saveで、レコードを更新することができる。

レコードの削除

レコードを削除してみる
 Friend.delete_all

モデル.delete_allで、すべてのレコードが削除できる。
ID指定で削除する場合は、モデル.delete(id)を利用する。

テーブルにレコードを追加しないで新規ActiveRecordオブジェクトを生成

friend = Friend.new

モデル.newを実行すると、テーブルにレコードを追加しないで新規ActiveRecordオブジェクトを生成することができる。
また、newした時点ではIDは発行されず、save等のメソッドでレコードをテーブルに登録する際に自動採番される。

動的な属性ベースのファインダ(Dynamicattribute-basedfinders)

テーブルに、ユーザーMr.Cを3人追加。

Friend.create(:name=>"Mr.C", :age=>10)
Friend.create(:name=>"Mr.C", :age=>20)
Friend.create(:name=>"Mr.C", :age=>30)

通常のFind

モデル.findで、名前がMr.C、年齢が30歳のレコードを検索

friend = Friend.find(:first, ["name = ? and age = ?", "Mr.C", 30])

Dynamic attribute-based findersでFind

where句の記述がめんどくさいので、Dynamic attribute-based findersを利用する。

friend = Friend.find_by_name_and_age("Mr.C", 30)

おしまい

ちょっとしたデータベースメンテナンスなら、irbとActiveRecordの組み合わせで容易に実行することができる。
SQLを書くよりラクなのです。

Ruby/Ruby on Rails/model/バリデータ入門(Validator)

1月 1, 2003 · Posted in Ruby, Ruby on Rails · Comment 

概要

ActiveRecordには、値の検証を行うValidatorが標準で付属している。

Validatorの利用には、
ActiveRecord::Base#validateメソッドををオーバーライドしてバリデーションを実装する低レベルな方法と、
それを高いレベルで利用できるヘルパーを利用する方法がある。

低レベルな方法は効率が悪いので、可能な限り高レベルな方を利用する。

ヘルパーによるバリデータの指定方法

モデルクラスに宣言を記述する。

例:Friendsテーブルのnameは10バイトが上限

class Friend < ActiveRecord::Base
validates_length_of :name, :maximum=>10
end

たったこれだけで、

?> friend = Friend.find(19)
=> #<Friend:0×4893088 @attributes={"name"=>"tarou", "id"=>"19", "age"=>"28"}>
>> friend.name="yamashita tarou"
=> "yamashita tarou"
>> friend.save
=> false
>> friend.errors.on "name"
=> "is too long (maximum is 10 characters)"

値のチェックが自動的に実行できる!!!!
なんと美しい。

モデル.errorsには、ActiveRecord::Errorsクラスが格納される

>> friend.errors.class
=> ActiveRecord::Errors

条件に同意したかどうかチェックする:validates_acceptance_of

会員制サイトなどによくある、会員規約に同意しますか?などのチェックボックスがチェックされたか
確認するために利用する。

オプション

-message – カスタムエラーメッセージ (デフォルトは: "must be accepted")
-on – このバリデーションがいつ有効になるのかを指定します (デフォルトは :save で、 オプションとして :create, :update)
-accept – 受け入れたと判断される値を指定します。デフォルトの値は文字列 "1" で、これは HTML チェックボックスとの関連付けをしやすくします。
-if – バリデーションすべきかどうかを決定するためのメソッド、Proc、文字列を指定します (例、:if => :allow_validation または :if => Proc.new { |user| user.signup_step > 2 })。メソッド、 Proc、文字列は true か false を値として返すか、または評価された結果が true/false でなければいけません。
http://techno.hippy.jp/apidoc/classes/ActiveRecord/Validations/ClassMethods.htmlより。

class Friend < ActiveRecord::Base
validates_acceptance_of :check
end
?> friend = Friend.new
=> #<Friend:0x485bb60 @attributes={"name"=>"", "age"=>0}, @new_record=true>
>> friend.check = 0
=> 0
>> friend.save
=> false
>> friend.errors.on "check"
=> "must be accepted"
>>
?> friend.check = "1"
=> "1"
>> friend.save
=> true

validate_on_create

validate_on_update

validates_associated

validates_confirmation_of

validates_each

値が存在しないことをチェックする:validates_exclusion_of

ActiveRecordの属性に、指定した値が設定されているかチェックする。
たとえば、ユーザー名にadministrator等の文字列を設定できないようにすることができる。

オプション

-in – 含まれてはいけないアイテムを列挙したオブジェクト
-message – カスタムエラーメッセージ (デフォルトは: "is reserved")
-allow_nil – true に設定されていれば、属性が null のときこのバリデーションをスキップします (デフォルトでは: false)
-if – バリデーションすべきかどうかを決定するためのメソッド、Proc、文字列を指定します (例、:if => :allow_validation または :if => Proc.new { |user| user.signup_step > 2 })。メソッド、 Proc、文字列は true か false を値として返すか、または評価された結果が true/false でなければいけません。
http://techno.hippy.jp/apidoc/classes/ActiveRecord/Validations/ClassMethods.htmlより。

class Friend < ActiveRecord::Base
validates_exclusion_of :name, :in => %w( admin superuser su administrator )
end
>> friend = Friend.new
=> #<Friend:0x48e6eb8 @attributes={"name"=>"", "age"=>0}, @new_record=true>
>> friend.name = "administrator"
=> "administrator"
>> friend.save
=> false
>> friend.errors.on "name"
=> "is reserved"

正規表現によるチェック:validates_format_of(attr_names)

値が含まれているかチェック:validates_inclusion_of

値の長さをチェック:validates_length_of,validates_size_of

値が数値かどうかチェックする:validates_numericality_of

値が空白かどうかチェックする:validates_presence_of

値が一意かチェックする:validates_uniqueness_of

次ページへ »