2007年08月16日

テストデータのロード

○fixtureを使ったデータベースへのデータ登録
> >fixtureにデータが記述済み
rake db:fixtures:load

productionのDBによみこますなら、
RAILS_ENV=production

を追加
posted by sistailsnow at 09:34| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年08月07日

rolerequirement

acts_as_authenticatedを利用したロール管理用のプラグインがあるようです。

http://code.google.com/p/rolerequirement/

また、使ってみようと思います。とりあずメモ。

追記:

利用方法:
CHNインターンシップぶろぐ
 http://internship-blog.chn.ac/blog/detail/22
posted by sistailsnow at 21:19| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

renderとredirect_to

renderもredirect_toも誤解を恐れずに言えば、view(rhtml)を呼び出すメソッドです。

render :action => 'hoge'

で hogeというviewを表示します。

実際には、action=> としていることからわかるように、このコントローラのアクションメソッドを実行します。

 ここで、renderとredirect_toの違いですが、

 rednerは、指定されたメソッドの中身は実行せず、すぐにview(rhtml)を表示します。

 redirect_toは、指定されたアクションメソッドを実行し、その名前のviewを表示します。

なので、次のようにすると同じ動作をします。


 redirect_to :action => 'hoge'



hoge #hogeメソッドを実行しておく
render :action => 'hoge'

#(但し、hoge内でrender,redirect_toの記述が特にない場合に限る)

posted by sistailsnow at 09:34| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年08月06日

radioボタン

radioボタンを作成する

http://railsapi.masuidrive.jp/module/ActionView::Helpers::FormTagHelper/radio_button_tag

こちらを参考にヘルパーに以下のメソッドを定義しておく

helper

def radio_select(object, method, tag_values, checkd = "true")
html = ''
for tag_value in tag_values
if tag_value[0] == checkd
html << %{<input id="#{object}_#{method}_#{tag_value[0]}" name="#{object}[#{method}]" value="#{tag_value[0]}" type="radio" checked="checked" />\n}
else
html << %{<input id="#{object}_#{method}_#{tag_value[0]}" name="#{object}[#{method}]" value="#{tag_value[0]}" type="radio" />\n}
end
html << %{<label for="#{object}_#{method}_#{tag_value[0]}">#{tag_value[1]}</label>\n}
end
return html
end

rhtml

書き方 <%= radio_select 'オブジェクト名', 'メソッド', [['値1', '表示値1'], ['値2', '表示値2'],...] %>

オブジェクト名 :obj
メソッド名 :sex

<%= radio_select 'obj', 'sex', [['male', '男性'], ['female', '女性']] %>


修正(helper)


def radio_select(object, method, tag_values, checkd = "true")
html = ''
for tag_value in tag_values
html << radio_button(object, method, tag_value[0])
html << %{\n}
end
return html
end
posted by sistailsnow at 16:27| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

options_for_select

オブジェクト obj
メソッド state

options_for_selectは
options_for_select(候補,現在の値)でoptionタグを生成する。
例えばhelperなどで候補を作成する。

rhtml

#selectタグ
<%= select_tag("obj[state]",options_for_select(states_for_select,obj.state)) %>




helper

def states_for_select
[["実行中",1],["未完了",2],["完了",3],["不要",4]]
end
ラベル:Rails
posted by sistailsnow at 14:44| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

rails: date型のselectタグ

rhtml

オブジェクト obj
メソッド date(obj.date)の場合


<%= form_tag :action=>'hoge' %>
<%= date_select(:obj, :date) %>
<%= submit_tag('hoge')
<%= end_form_tag %>

ラベル:Rails
posted by sistailsnow at 14:24| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年07月27日

rails:バリデーション

Model
#あらかじめ用意されているバリデーションなら、フィールド名を指定してやるだけでよい

class Article < ActiveRecord::Base
validates_presence_of :title, :body #Not Null
end


Controller

def create
@article = Article.new
end

def execute
@article = params[:article] #インスタンス変数を使う。エラー時に戻るときインスタンス変数でないとエラーが表示されないため

unless @article.valid? #バリデーションチェック
   #バリデーションエラー時には戻る
return render(:action => 'create')
  
end
#以降の処理
end


View
create.rhtml


<%= form_tag( :action=> "create_article") %>
<%= error_messages_for 'article' %> #指定したオブジェクトすべてのエラー表示
<table>
<tr>
<th>タイトル</th>
<td><%= text_field('article','title') %> #入力フィールド
<br /><%= error_message_on 'article','title' %> #このフィールドに対するエラーメッセー表示
</td>
</tr>
</table>
<%= submit_tag '投稿' %>
<%= end_form_tag %>


エラーメッセージにはclass属性が指定されているので、scaffoldで作成したスタイルシートを読み込ませるなどするとそれなりの表示になる。
ラベル:Rails
posted by sistailsnow at 08:18| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年06月27日

rails: TODO Mgr作業ログ

○acts_as_authenticatedの適用(インストール、テーブル作成済み)
 ・application.rb
class ApplicationController < ActionController::Base
include AuthenticatedSystem #account_controller.rb内の記述は削除

 ・manage_controller.rb

class ManageController < ApplicationController
before_filter :login_required #:only => [ :edit, :update ] でログイン要求を設定したメソッドのみに指定


○自作モジュール/lib/private_helper.rb
ApplicationControllerでinclude PrivateHelper

○DB,モデルの確認
 ・リバースエンジニアリングでER図にすると確認しやすい


○疑問
 ・自作モジュールの最適な置き場所は?
ラベル:Rails
posted by sistailsnow at 14:24| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

rails:入門2

rails入門の続き

細かい準備的作業

・レイアウトとスタイルシートの用意
 /app/view/layout/コントローラ名.rhtml 作成


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>TODO Manager</title>
<%= stylesheet_link_tag 'default' %> ←スタイルシートの呼び出し
</head>
<body>

<%= yield %> ←ここにview/コントローラ名/xxx.rhtmlの中身が入る

</body>
</html>


 /public/stylesheets/defualt.css を用意

ラベル:Rails
posted by sistailsnow at 14:14| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年06月22日

todo_mgr:acts_as_authenticated

インストール

script/plugin source http://svn.techno-weenie.net/projects/plugins
script/plugin install acts_as_authenticated
script/generate authenticated user account

migrateファイルにて
 型を :time で指定しても、 :datetime で指定しても内部ではtime型らしい
posted by sistailsnow at 16:48| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

rails:入門 rails:入門

アプリケーションの作成手順メモ

○開発環境作成(win)
・rubyインストール
・railsインストール
スタート→プログラム→Ruby-186-25→RubyGems→RubyGems PackageManager
コマンドラインが出てくるので"gem install rails -y"
    (= gem install rails --include-dependencies) で過去のバージョンを残したままインストールできる

・radrails、aptana_update
・sqlite3
  http://www.sqlite.org/download.htmlより、
sqlite、sqliteddlそれぞれ解凍したフォルダの内容(sqlite3.exeとsqlite3.dll)を任意の同一ディレクトリに
コピー,コピー先のディレクトリを環境変数PATH

○データベース設計
SQL Designer http://ondras.praha12.net/sql/demo/

○初期設定
config/environmetn.rb ,database.yml
http://sistailsnow.seesaa.net/archives/200704-1.html

(☆Userテーブルはacts_as_authenticatedを使うので先にプラグインのインストールして、このテーブル、モデル、コントローラだけ作る。)


○モデルの生成
script/generate model モデル名(単数形)

○migration
http://wota.jp/ac/?date=20050817
migrationファイルを編集して、DB定義を作る
habtmについて

○#rake db:migration
migrationファイルからDB生成

○コントローラの作成
#script/generate controller ControreName MethodName1 MethodName2...
でapp/controllersにコントローラ、app/views/にメソッドに対応したビューの雛形ができる。(中身を作成)


ここまででWebアプリサーバ(Webrick)を立てると
 http://localhost:ポート番号/コントローラ名/メソッド名
で動作確認可能
ラベル:Rails
posted by sistailsnow at 13:01| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年06月19日

rails:Web Service&トランザクションのテスト

Web APIをrailsでは”web_service_scaffold :invoke”でWebアプリで作成したAPIを簡単にテストできるのだが、rails 1.2.3の時点では、パラメータが配列の場合は対応していないようである。

そこでテストユニットでテストを行う。

Webサービスにはトランザクション処理を加えてあって、きちんとロールバックされないという問題にはまる。

原因

http://d.hatena.ne.jp/yukiwata/20070529/1180423328
で紹介されているように、テストの場合fixtureの機能の兼ね合いでロールバックがうまくできなかったようである。
ラベル:Rails
posted by sistailsnow at 17:11| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年06月18日

rails:リーバスエンジニアリング

RailsのモデルとコントローラのER図を作成してくれるRailrodaを使った。


参考 http://blog.takeda-soft.jp/blog/show/157

DBのER図が作りたいので以下のようにやってみた。

http://www.graphviz.org/Download_windows.php

でGraphvizのWindows版をインストール

コマンドプロンプトで、

#gem install railroad

でrailroadをインストール

railsのアプリケーションルートに移動して、

#cd [アプリケーションルート]

#railroad -o er.dot -M

で、グラフィックの設計図である.dotファイルを作成。(-Mでモデル、-Cでコントローラを指定)

#neato -Tpng er.dot > er.png



・多対多(habtm)にも対応していた

・モデルのチェックにもいいかも。
posted by sistailsnow at 11:49| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年05月15日

確認画面の作成

入力画面→確認画面→完了画面
というページ遷移をすることがWebアプリだと多い。

入力画面のフォームでフォーム用のインスタンスに値をセット。

確認画面では値を文字列として表示するだけ。

確認画面のあとインスタンスのデータを登録などするメソッド。

その際確認画面でインスタンスを登録メソッドに渡さなければならないから、セッションにインスタンスを保存するか、hiddenタグでデータを持たせておかないといけないという問題がある。

今回はセッションはセキュリティ上もよろしくないのではないかと考え、hiddenで渡す方法をとる。

ここではUserというのがActiveRecordを継承したクラス。この中のcontent_columnsというメソッドを使うと、いちいちフィールドごとにhiddenタグを書かなくてよくてかなり労力を減らせる。


<% for column in User.content_columns %>
<%= hidden_field :user, column.name %>
<% end %>


追記

確認画面のアクションメソッドで、flashにデータを入れておくという手もある。
flashに入れておけば、次のアクションまでは中身が保持されるので、今回の用途には向いているかも。

確認アクションメソッド

def confirm
...
flash[:user] = user
end


完了アクションメソッド

def complete
user = flash[:user]
userに対する処理(DBへの保存など)
end
ラベル:Rails
posted by sistailsnow at 18:18| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年05月10日

ルーティング routes.rb

ユーザ毎のページを作って、そのページへのアクセスURLを考える。

たとえば
 http://xxx:3000/ユーザ名/コントローラ名/アクション名

/config/routes.rb に


map.connect ':user_name/:controller/:action/'


と記述すれば指定されたアクション(メソッド)で

user_name = :params[:user_name]

としてユーザ名が取ってこれる。のでこれを使ってそのユーザ用のデータを表示してやればよい。

注意としては、route.rbを上から評価していって、map.connect '条件'
の条件が最初にマッチしたもののみが実行される。ので、デフォルトの指定の前に書いたり、デフォルトの記述を消しておくほうがよいかもしれない。
ラベル:Rails
posted by sistailsnow at 14:08| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年05月09日

render とredirect_to


xxx #まずxxxというメソッドを実行しておいてから
render :action => "xxx" #そのページを表示



redirect_to :action => "xxx" #xxxというメソッドを実行してそのページを表示


といった違い…なのかな?
ラベル:Rails
posted by sistailsnow at 15:38| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

redirect_to 注意事項


redirect_to "/404.html" if 条件
 …


として条件判定でエラーページに飛ばす。

そのときに必ずreturnを入れてやる。
そうしないと次の…という処理を実行してしまう。


return redirect_to "/404.html" if 条件
 …
posted by sistailsnow at 15:17| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年05月08日

conditionsに使えるのはnil? or null?

ActiveRecordのconditionsに使えるのはnil? or null?


XXX.find(:all,
:conditions => ['ooo != null'])



正解はnullだったようです。ルビーではnilを使ってるから若干ややこしい。。。


追記:上の書き方も間違ってました。比較は'!= null'じゃなくて
'not null'でした。だから次のようになります。

XXX.find(:all,
:conditions => ['ooo not null'])
posted by sistailsnow at 09:41| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

2007年04月24日

rails: script/generate とrakeのテスト

環境:rails1.2.3 ,sqlite3のインストール済

$ruby script/generate model Tester

でモデル、テスト、フィクスチャ(テストデータ)、マイグレーション(データベース定義ファイル)の雛形が生成される。

config/database.ymlでDBの設定

development:
adapter: sqlite3
database: db/Test_development


といった感じで、test,productionも設定


これを元にマイグレーションでDBを定義して、
$rake db:migrate
でDB生成

ここで、DBのテストを行う
$rake


次に
$ruby script/generate scaffold Tester 
で、ビューとコントローラ、テストを作る。

これで、データの表示、登録、削除、などができるページが作成できた。

のでまた、rakeでテスト。

まず、
test/fixtures/testers.yml
にテストデータを記述。

one:
id: 1

となっているが、

test/functional/testers_controller_test.rbのsetupではテストDBデータの呼び出しが tester(:first)... となっており、
testers.ymlではoneと書いてあるところと食い違う。
そこで、

tester.ymlを

first: #one:
id: 1
… #DBデータ記述

とする。

posted by sistailsnow at 10:12| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。