Index

Index

Ruby On Railsを利用した開発の記録をまとめたIndexページです。
Ruby On Railsのバージョンは2.0.2です。
まだまだ未熟なのでたまに間違ってるかもしれないですが
コメントにて突っ込みいただけると助かります。

また、Ruby仲間も募集中なので是非是非コメントお待ちしています。


Ruby On Rails開発記


 ■Rails応用テクニック
  -ActiveRecord
   複数の更新系処理を同時にCOMMITする
   ActiveRecordのModelクラスとエンティティ名の関係を自由に設定した
   集計処理を実装
   Railsでシステムカラムを用意する
   Modelクラスのカラムフィールドアクセス
  -ActiveViewer系
   DATE_SELECTをCHAR型のカラムに対応させる
   リンク用ボタンを作る
   外部のサイトへリンクする
   改行を表現する
   <% %>と<% -%>、<%= %>と<%=h %>
   erbの中で別のerbをincludeする
   静的なHtmlをインクルードする
   ERBを部品化する
   link_to、url_forでアンカーリンクを作る
  -ActionMailer系
   ActionMailerでエラーをハンドリングする
  -ActionController
   RailsのControllerをフォルダ分けする
   エラー画面、エラー処理
   link_to、url_forでアンカーリンクを作る
  -その他
   RailsにWebサーバ起動処理を追加する
   HTTPクライアント情報を取得する
   トラックバック機能を作る
   RailsでCSV出力処理を実装する
   ドメインの異なるサイトでセッションを共有する
   戻るボタンの実装方法
   require_dependencyとrequireの違い


 ■Rubyで便利機能を作る
   実行環境情報を取得する
   Syslogで障害通知機能を作る
   可逆式暗号化関数を作る
   半角 全角の変換関数を作る
   型(Class)のチェック
   重み付抽選機能を作る
   静的なHtmlをインクルードする
   日本語の文字列を部分抽出


 ■「Javaならこう書くけどRubyでは??」というTIPS
   Class.forName
   STATICメソッド
   コンストラクタ
   オーバーロードは書けるの?
   ResourceBundleでプロパティーファイルを読み込む
   インクリメント(i++)


 ■Ruby TIPS
   ’’と””と%Qと%qの違い
   nilを処理する


 ■よくあるエラーTIPS
   Webサーバ起動時のNoMethodError
   Webサーバ起動時のrequireのエラー
   Railsのコントローラークラスでsendというメソッドを定義する
   FireFoxでActionController::InvalidAuthenticityToken
   モデルクラスのエラー→ERBの原因不明エラー

 ■バージョンアップ
   Rails2.0.1→2.1.0


 ■プラグイン導入
   Ruby On Rails2.0にLoginEngineを導入
   ページ切替用プラグインPageNateをインストール
   Rails用グラフプラグインGruffの導入
   SSL/非SSL混在サイト用Railsプラグインssl_requirementの導入


 ■あんまり関係ないですが
   なかのひと.jp
   TopHatenar

Links

Links

よく参考にするサイトを紹介します。


Ruby

 ■API
   RDoc(英語) http://www.ruby-doc.org/core/
 
 ■リファレンス
   Rubyリファレンスマニュアル http://www.ruby-lang.org/ja/man/html/Ruby_A5EAA5D5A5A1A5ECA5F3A5B9A5DEA5CBA5E5A5A2A5EB.html
   Rubyリファレンスマニュアル(ライブラリ編)http://www.ruby-lang.org/ja/man/html/_C5BAC9D5A5E9A5A4A5D6A5E9A5EA.html

 ■プラグインの紹介
   Rails ify(英語) http://www.railsify.com/

Modelクラスのカラムフィールドアクセス

INDEX PAGE


Modelクラスのカラムフィールドアクセス


Railsも使い込んでくると、コントローラー間で共通の処理を
なるべくModelクラスのほうに定義して共通化を図りたくなります。
その時に一箇所落とし穴があるので共有までに。


例えば画面からhogeという入力欄をつくった場合

class Fugas < ActiveRecord::Base

 attr_accessor :hoge

end


とすると、実際にこのFugaテーブルにHogeというカラムが存在しなくても
画面側でうまく処理することができるようになります。


ここで、hogeのカラムが呼ばれた時には
fugaカラムにカッコをつけて返したいという場合

class Fugas < ActiveRecord::Base

 attr_accessor :hoge

 def hoge
  return "(#{fuga})" if fuga
  return nil
 end

end


さらに、hogeの値に「。」を取り付けてfugaカラムに登録したいという場合

class Fugas < ActiveRecord::Base

 attr_accessor :hoge

 def hoge
  return "(#{fuga})" if fuga
  return nil
 end

 def hoge=(val)
  fuga = "#{val}." if val
 end

end


と書くことでうまく行くような気がするのですが
何故かこれがうまく行きません。
色々試した結果

class Fugas < ActiveRecord::Base

 attr_accessor :hoge

 def hoge
  return "(#{fuga})" if fuga
  return nil
 end

 def hoge=(val)
  self.fuga = "#{val}." if val
 end

end


とするとうまく行くことがわかりました。
selfはモデルクラスのメソッドの中で使用すると
他の言語の"this."と同じ役割を果たすようです。


というわけで、最近では気持ち悪いので

class Fugas < ActiveRecord::Base

 attr_accessor :hoge

 def hoge
  return "(#{self.fuga})" if self.fuga
  return nil
 end

 def hoge=(val)
  self.fuga = "#{val}." if val
 end

end


と、本来必要のない取得のほうにも"self."とつけるようにしています。



INDEX PAGE

モデルクラスのエラー→ERBの原因不明エラー

[Ruby On Rails][Ruby]モデルクラスのエラー→ERBの原因不明エラー
INDEX PAGE

モデルクラスのエラー→ERBの原因不明エラー


モデルクラスにデータよりの処理を記述しておくと
コントローラーをまたぐような処理でとても便利なのですが
この処理がしくじったときに、ERBでエラーが表示されてしまいます。


コントローラーでのエラーの場合には
問題箇所としてコントローラーのファイル名と行数が表示されますが
モデルクラスに問題があり
モデルクラスの処理をERBから直接コールしているような場合
ERBの問題としてログメッセージがはかれます。


未だにたまにだまされてドツボにはまります。


INDEX PAGE

nilを処理する

INDEX PAGE

nilを処理する



ソースの中では、変数がnilの時の例外処理を書くことが良くあります。


実は恥ずかしながらRubyの言語仕様を良く知らず
最近まで

 if hoge == nil then
  p "nilです"
end

 
   ↓

 p "nilです" if hoge == nil


というように書いていました。
しかし、Rubyの言語仕様ではif文の引数は
false又はnilの時に偽と判定されるそうです。


つまり、下記のようにかけます。

 unless hoge then
  p "nilです"
end

 
   ↓

 p "nilです" unless hoge


今まで無駄なソースを書いていたと反省する限りです。


さらに、一緒に仕事をするKさんのソースを見て知ったのですが
変数の値がnilの時にデフォルト値を与えるような式を
"||="という式で表現することができるそうです。

 hoge = "hoge" unless hoge == nil

  を

 hoge ||= "hoge"


こんなテクニックを知らなかったあまり
ソースを汚く書いていたことを反省する今日この頃です。


INDEX PAGE

require_dependencyとrequireの違い

INDEX PAGE

require_dependencyとrequireの違い


色々なソースの中でrequire_dependencyというのがでてくるが
いったいどういう意味なのかよく理解できずに利用していました。

自分でかいたことはほぼないのですが
そろそろまじめに調べてみようと思いソースを読もうとしましたが
Googleで調べたら詳しく説明しているサイトが。

http://www.pistolfly.jp/weblog/2007/06/require-dependency.html

まとめると


■require
 ・Rubyの機能
 ・指定したRubyファイルを読み込む
 ・既に当該ファイルがキャッシュ済みならそちらを読みこむ


■require_dependency
 ・Ruby On Railsの機能
 ・指定したRubyファイルを読み込む
 ・既に当該ファイルがキャッシュされていても再度読み込む


というわけで、ロード対象が更新されているときに
再読込を実施するかどうかが異なっているようです。


開発を行うときにはrequire_dependencyのほうが便利そうですね。
なお、Railsの内部では基本的にはrequire_dependencyが使われているようです。
でも、本番環境とかだとパフォーマンスの劣化につながりそうですよね。。。。。


環境別にどういう振る舞いになるのか設定できるとうれしいのですが。。。。。


INDEX PAGE

SSL/非SSL混在サイト用Railsプラグイン ssl_requirementの導入

[Ruby][Ruby On Rails]SSL/非SSL混在サイト用Railsプラグイン ssl_requirementの導入

INDEX PAGE


SSL/非SSL混在サイト用Railsプラグイン ssl_requirementの導入


SSLと非SSLがチャンポンのサイトを作成する場合
皆様どのように実装してますか?


私はWeb素人ということもあって
当初なんの疑いも無くリンク元のURLで制御していました。
しかし、これをやりはじめると本当にソースが汚い。
何とかすっきりさせられないかと想い
URL_FORを書き換えようかと考えていたのですが
そんな思想のプラグインが見つかりました。


ssl_requirement
http://plugindb.jong.gr.jp/homes/20


こちらのプラグインはアクション単位でSSL/非SSLを設定できるプラグインです。
大まかな導入の流れは


(1)取得&配置
(2)コントローラーにミックスイン
(3)アクションごとに設定


という流れとなります。
下記のページにサンプルソースが掲載されています。


http://dev.rubyonrails.org/svn/rails/plugins/ssl_requirement/README



これで、ERBをすっきり書けそうです。


INDEX PAGE