ruby

Rubyの例外処理をPHPと比較してみるよ

というか、まあ比較しながらじゃないと私が分からないだけなんだけど。 catchとthrow Rubyにおいてcatch・throwはループ処理のメソッドで、例外処理とは全く関係ない。例外処理はraise・rescueメソッドを使う。 catch ループを抜け出す為のラベルとして使う…

gemの使い方

しばらく音沙汰有りませんでしたが、お仕事でRubyをいじりはじめました。ということでメモメモ。 gem list インストールされているパッケージを一覧表示 gem install xxxxxx (-v=X.X.X) 指定パッケージのインストール(-vでバージョン指定) gem uninstall x…

Railsをはじめてみるよ

ということでRails。 CakePHPにもRoRのようなscaffold機能があったけど、いかんせん会社のカラム命名規則がおかしかったせいで自動作成周りの美味しい機能は全く使用しなかった(できなかったともいう)。 ということで、このへんの機能を触るのはほぼ初。実…

まずはプロジェクト作成

RadRailsを起動 Ruby エクスプローラー上で右クリック>新規>Rails プロジェクト プロジェクト名に「ToDo」あとはデフォルトでOK。「プロジェクト作成後にサーバーを自動開始」にチェックを入れておくと自動実行されるのでチェックに便利。 新規プロジェク…

scaffoldでテーブル自動生成

ウィンドウ>ビューの表示>ジェネレーター を選択し、「ジェネレーター」ビューを画面に表示する 生成プログラムに「scaffold」パラメーターに「Category category:string」を指定して右端の緑三角ボタンをクリック script/generate scaffold Category cate…

CRUDとかRESTfulとかrouteとか

CakePHPと同様、RoRもCRUD(Create, Read, Update, Delete)なディレクトリ構成でアクセスする。 RESTfulとはなんぞやについてはこちらを参照。もしくは資料のP.12〜13辺りに詳しい。RoRの場合はrakeコマンドを使用することでアプリケーションのメソッドに対…

バリデーションを追加してみる

db/models/category.rb を開き以下を記述。 class Category < ActiveRecord::Base # 未入力チェック validates_presence_of :category, :message => "が未入力です。" # 文字数チェック(20文字以内/半角全角共通) # 末尾のif文は「categoryが未入力ではな…

i18nで簡単日本語化(Rails2.2.x)

Rails 2.2以上の機能らしい。実行環境を2.1にバージョンダウンしたら使えなくて涙目。 i18nによる日本語化 - challenge Ruby on Rails i18nによる日本語化についてはこのページにまるまる書いてある。CakePHPの場合は国際化が結構面倒で結局日本語ベタコーデ…

リレーションシップを設定する

資料のP.23を参考に、次はitemテーブルを追加。先のcategoryテーブルとの関係は「多対1」となるので、モデルにもその辺りを設定しておく必要がある。この辺はCakePHPと同じくHABTM(hasOne, hasMany, belongsTo, hasAndBelongsToMany)なのでそんなに悩まな…

コントローラで覚えておくと良いこと

Model.find(:all) と Model.all は同じこと。 なので、 Model.find(:all, :order => :category) は Model.all(:order => :category) と書いても動作する。 CakePHPでもfindとfindAll、saveとsaveAllとかあったっけ。

ビューで覚えておくと良いこと

<%= h category.category %> hをつけると自動的に内容をHTMLエスケープしてから出力してくれる。 <%= link_to "Destroy", category, :confirm => "Are you sure?", :method => :delete %> link_toに:confirmをつけると、選択リンクの処理を実行する前に確認…

ヘッダ出力

<% @heading = "データ一覧" %> とするだけで、<title>タグと<h1>タグに指定した文字列を出力してくれる。</h1>

処理完了メッセージをビューに投げる

layouts/application.html.erb <% if flash[:notice] %> <p class="notice"><%=h flash[:notice] %></p> <% end %> controllers/xxxxxx.rb # リダイレクト先で表示したいメッセージをセット flash[:notice] = "処理が完了しました。" # リダイレクト先を指定 format.html { redirec…

改行コードを表示に反映させる

app/helpers/application_helper.rb にこんな感じに記述。 module ApplicationHelper # HTMLで書けない文字の実体参照と改行コードのHTMLへの置換を行う def hbr(target) target = html_escape(target) target.gsub(/\r\n|\r|\n/, "<br />") end end 使用時は <%=h…

コントローラとビューでセッションを使ってやりとり

リンクを作成する。 <%= link_to t("link.New_note"), {:controller => "notes", :action => "new", :id =>@item.id} %> リンクをクリックするとコントローラにidが渡されるので、それをセッションに格納する。 # 渡されたIDを格納する session[:item_id] = …

Ubuntu 8.10 + Ruby on Rails

Rubyはよく判らないので、とりあえず入れるまでの手順。 # sudo apt-get install ruby irb rdoc ... # wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz # tar zxvf rubygems-1.3.1.tgz # cd rubygems-1.3.1/ # sudo ruby setup.rb ...…