Archive for 11月, 2008
user
モデル名。同じ名前で登録関係のコントローラも作成される。以前のデフォルトでは、userモデルと登録のためのaccountコントローラだったけど、今回は両方とも同じ名前で作られる
sessions
ログインログアウト用コントローラ名。ログイン情報自体を一つのリソースとしてみなしているんだね。面白い。
–include-activation
メール認証を行うかどうか。最初の登録は仮登録で、届いたメールに書かれてるアドレスにアクセスすると登録が完了するってやつだね。以前は公式でやり方は 紹介されていたけど、自分で実装する必要があった部分。でもobserver使うやり方は好きじゃないので、うちでは使ってなかった
–stateful
プラグインacts_as_state_machineを使ってユーザの状態管理をする。仮登録状態とか、正会員とか、退会とかね。そんな状態をいくつか 定義しておいて、状態Aから状態Bに変わった時にはCという処理を行う、といったことをacts_as_state_machineを使うことで簡潔に書 くことができる。利用には別途acts_as_state_machineのインストールが必要
・カラムの追加(マイグレーションファイルで使う)
mcol +tabキー
↓
add_column :table, :column, :string
・入力文字の妥当性チェック(モデルクラスで使う)
vp +tabキー
↓
validates_presence_of :attribute
※↓こんな感じで
validates_presence_of :title, :body
・link_to
liai +tabキー
↓
<%= link_to "link text...", :action => “edit”, :id => @item %>
■1.DB作成
windowsコマンドプロンプトから
mysqladmin -u root -p create rubyweblog_development
■2.新規プロジェクト作成
■3.database.ymlを編集
DB設定に沿って、[構成]以下のdatabase.ymlを編集
■4.モデルを作成
「モデル」ノードを右クリックし、「生成」
「引数」フィールドに「Post title:string」と入力
→postモデルが生成される。
モデルが扱うpostsテーブルをコントロールするマイグレーションファイルも作成される。
(テーブル名は複数系になる)
■5.マイグレーション設定
001_create_posts.rbの編集
class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.column :title, :string
end
end
def self.down
drop_table :posts
end
end
プロジェクト名上で、右クリックして
「データベースマイグレーション」>「現在のバージョンへ」
■6.コントローラの編集
「コントローラ」ノードを右クリックし、「生成」
名前フィールドに Blog と入力し、「生成」
class BlogController < ApplicationController
scaffold :post ←これを追加
end
■7.routes.rbの編集
# map.connect '', :controller => “welcome”
↓
map.connect ”, :controller => “blog”
index.htmlは削除しておく。
■8.プロジェクトの動作確認
メニューより、「主プロジェクトの実行」を選択してテスト。
■9.テキストエリアの追加
「データベースマイグレーション」ノードを右クリックし、「生成」
「引数」フィールドで、AddBody を入力して「了解」
def self.up の下に行を追加し、「mcol」と入力して Tab キー
カラム追加用のコードテンプレートが表示されるので、Tabキーで移動して、それぞれの内容を追記
add_column :posts, :body, :text
プロジェクト名上で、右クリックして
「データベースマイグレーション」>「現在のバージョンへ」
[sourcecode language='ruby']
class AddPrice < ActiveRecord::Migration
def self.up
add_column :products, :price, :decimal, :precision => 8, :scale => 2, :default => 0
end
def self.down
remove_column :products, :price
end
end
[/sourcecode]
————————————————-
■self.up
追加メソッド
productsテーブルに、price列を、decimal型で生成。有効桁数は8桁、小数点以下は2桁。デフォルト値は0
■self.down
削除メソッド
price列を削除
■入力の妥当性検査
モデル側で定義
以下のソースを追加
[sourcecode language='ruby']
validates_presence_of :title, :body
[/sourcecode]
※”vp”入力語、tabで置換
■プロジェクト作成
Netbeansウィザードから作成
■モデル作成
モデル→「生成」から作成。引数指定しておくとマイグレーション用のファイルも同時に生成される。
例)
名前欄に以下を入力
Product title:string description:text image_url:string
■マイグレーションファイルの編集
モデルを作成時にマイグレーションファイルも作成される。
カラム追加する必要がある場合などはこちらで追加
■マイグレーション実行
プロジェクト名→データベースマイグレーションで、DB管理
rake db:migrate
とかを裏で実行している。
■コントローラ作成
コントローラ→「生成」から作成。作成時にコントローラ名を入力
例)
Admin
※AdminControllerクラスを作成
生成されるadmin_controller.rbファイル内に
scaffold :<モデル名>
だけでも、とりあえずモデルの管理するテーブルをコントロールする土台(scaffold)アプリケーションは生成される。
ただしこの記法は動的scaffold。
■ルートの変更
構成(config)フォルダ内の、routes.rbで以下を編集
#? map.connect ”, :controller => “welcome”
↓
map.connect ”, :controller => “admin”
公開(public)フォルダ内の、index.htmlを削除
※このファイルが最優先されるため。
■実行
F6キーでWEBrickが立ち上がり、検証可能
■属性(カラム)の追加
データベースマイグレーション→「生成」でマイグレーションファイルを追加
名前欄には、このマイグレーションファイルが何を追加するものか書くとわかりよい
例)
AddPrice
※価格を追加
生成されたマイグレーションファイルに追加列情報を記述
nslookupの使い方とか
————————————————-
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>nslookup www.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
Non-authoritative answer:
Name:??? www.miyai.jp
Address:? 202.172.28.18
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>nslookup takuya.miyai.jp
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Server:? router
Address:? 192.168.5.1
*** router can’t find takuya.miyai.jp: Non-existent domain
C:\Documents and Settings\so-ten>nslookup
*** Can’t find server name for address 192.168.5.16: Non-existent domain
Default Server:? router
Address:? 192.168.5.1
> server NS3.VALUE-DOMAIN.COM
Default Server:? NS3.VALUE-DOMAIN.COM
Address:? 59.106.14.70
> takuya.miyai.jp
Server:? NS3.VALUE-DOMAIN.COM
Address:? 59.106.14.70
DNS request timed out.
timeout was 2 seconds.
*** NS3.VALUE-DOMAIN.COM can’t find takuya.miyai.jp: Non-existent domain
> takuya.miyai.jp
Server:? NS3.VALUE-DOMAIN.COM
Address:? 59.106.14.70
DNS request timed out.
timeout was 2 seconds.
*** NS3.VALUE-DOMAIN.COM can’t find takuya.miyai.jp: Non-existent domain
> server ns1.value-domain.com
DNS request timed out.
timeout was 2 seconds.
Default Server:? ns1.value-domain.com
Address:? 202.212.235.10
> takuya.miyai.jp
Server:? ns1.value-domain.com
Address:? 202.212.235.10
DNS request timed out.
timeout was 2 seconds.
*** ns1.value-domain.com can’t find takuya.miyai.jp: Non-existent domain
> www.miyai.jp
Server:? ns1.value-domain.com
Address:? 202.212.235.10
DNS request timed out.
timeout was 2 seconds.
Name:??? www.miyai.jp
Address:? 202.172.28.18
> takuya.miyai.jp
Server:? ns1.value-domain.com
Address:? 202.212.235.10
DNS request timed out.
timeout was 2 seconds.
*** ns1.value-domain.com can’t find takuya.miyai.jp: Non-existent domain
> exit
C:\Documents and Settings\so-ten>
————————————————-
モデル(product.rb)に標準検証メソッドを追加
●入力値が空で無いかの判定
validates_presence_of :title, :description, :image_url
:title, :description, :image_urlカラムが空だとNG判定
●数値入力かの判定
validates_numericality_of :price
:priceカラムが空だとNG判定
●重複チェック
validates_uniqueness_of :title
:titleカラム内容が重複している場合はNG
●入力文字列のフォーマット判定
validates_format_of :image_url, :with => %r{\.(gif|jpg|jpeg|png)$}i, :message => “はGIF、JPEG、PNG画像のURLでなければなりません”
:image_urlカラムの入力文字列に、.gif,.jpg,.jpeg,.pngが入ってないとNG
●正の数判定
protected
def validate
errors.add(:price, “は最低でも0.01以上でなければなりません”) if price.nil? || price < 0.01
end
price列への入力数値が、空でないかもしくは0.01以上かの判定
コントローラ→「生成」で、生成引数に scaffold を選択。モデル名とコントローラー名をそれぞれ入力
例)今回の場合
モデル名:Product
コントローラ名:Admin
ファイルがすでにある場合。は、上書きを選択しておく。
以下のようにかけばOKだった
————————————————-
[sourcecode language='css']
/*CSSコード*/
h1 {
height: 100px;
}
[/sourcecode]
[sourcecode language='ruby']
#テンポラリファイルを開く
temp_file = Tempfile.new(“lv_temp”)
file_path2.each {|path2|
next unless /procs20/s =~ path2
File.open(path2){|file|
file.each{|line|
temp_file.print line
}
}
}
[/sourcecode]
————————————————-
