サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
sai-ou89.hatenadiary.org
INDEX PAGE オーバーロードは書けるの? Javaでは同じ名称のメソッドで引数の型、個数などを変えられる いわゆるオーバーロードというテクニックが存在します。 Rubyに関しては、オーバーロードという記述方法は存在していないようです。 そもそもスクリプト言語ということもあり 引数に関する型判定が存在していないということが一番大きな理由と思われます。 しかし、実際問題としてオーバーロードを使えないと プログラムとして使いにくいということも多いはずです。 Rubyではオーバーロードこそできませんが、同じようなことをする方法はいくつか提供されています。 ■引数にデフォルト値を設定する 下記のように、引数に対して「=」をつなげて値を設定することでデフォルト値を設定することができます。 デフォルト値が設定できれば引数自体は省略可能になります。 def hoge(key1,key2,key3=
INDEX PAGE erbの中で別のerbをincludeする erbでは、他の画面と共通利用したいような部品があります。 (1)ページヘッターやページフッターのような全画面共通の部品 ↓こういうやつですね。 (2)入力フォームなど (3)検索結果などのスプレッドシート (1)は <%= render :file => 'xxxx' %> (2)、(3)は <%= render :partial => 'xxxx' %> というように書くことで、他のerbを呼び出すことができます。 二つの違いは以下の通りです。 ■render :file 単純によそにあるerbを読み込むだけです。 ページヘッターやページフッターのように動的ロジックはあっても 外側からパラメーターを渡す必要の無いようなerbの読込に適しています。 ※ファイル名に特に制約は無いです。 ■render :partial 外側
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ファイルを読み込む ・既に当該ファイルがキャッシュされていても再度読
INDEX PAGE RailsのControllerをフォルダ分けする 一応書いておく程度の共有です。 ある程度の規模のシステムを開発すると コントローラーだらけになってしまい 管理のためにもコントローラーをフォルダ分けしたいと感じます。 Railsでコントローラーをフォルダわけしたいけどどうすれば良いの? という方も多いのではと思います。 基本的にはフォルダ分けは可能なのですが その場合、クラス定義をちょっといじらないといけないです。 例えば controller/hoge/hoge_controller.rb というコントローラーを作成したい場合 class Hoge::HogeCntroller < ApplicationController end または class Hoge clssHogeCntroller < ApplicationController end end と
INDEX PAGE 例えば「http://hoge/hogehoge/index#fuga」というような アンカーリンクを作成したいときに Railsでどう書けばよいのかという話しです。 link_to、url_forのソースを読めばわかりますが、 下記のように書くとそういうURLが出力されます。 <%= link_to 'ほげ', :controller => '/hogehoge', :action => 'index', :anchor => 'fuga' %> url_forも基本的には同じように書けば同じように使えます。 ERBの中でも、controllerの中でも同じように利用できました。 INDEX PAGE
INDEX PAGE 可逆式暗号化を作る データベースにデータを格納する時 ログイン画面用のパスワードは 照合さえできればよいので不可逆式の暗号化を採用が良いと思います。 具体的にはStringクラスのcryptを利用するのが良いと思います。 http://www.ruby-lang.org/ja/man/html/String.html#crypt これで、システム管理者も含めて誰もデータベースのデータを読めないはずです。 しかし、住所・電話番号のような データベースにそのまま入れたくないけど かと言って、復号できないとシステムを作れないような場合 これを実現するにはOpenSSL用のライブラリーを利用するのが良いようです。 http://www.ruby-lang.org/ja/man/html/OpenSSL_Cipher_Cipher.html ちょっとこのまま各ソースで実装するの
INDEX PAGE 重み付抽選機能を作る 登録されたデータを重み付けランダム抽選したいという要件は Webでは意外とあるのではと思うのですが 今回、製作中のWebサイトで投稿された内容を 五段階のユーザーの評価の平均点に対応した頻度で表示する機能を作りました。 基本的な設計としては ■idと重みというセットのデータを複数登録していく ■登録完了後に、idを重みの数だけハッシュにセットしていく。 ■このセットの中かidを無作為に抽出します。 具体的にはこんな感じのソースになりました。 class WghtdRndmExtrct def initialize(arry = nil) @key_cntr = 0 @rltt_cntr = 0 @wghtd_rltt = Hash.new unless arry ==nil then addArry(arry) end end def addAr
INDEX PAGE 日本語の文字列を部分抽出 RubyのStringには str[0,10] というように、文字列を切り取る関数が存在します。 しかし、この関数はマルチバイト文字には対応していないので 日本語フォントを切り取る時には運が悪いと一番最後の文字で文字化けを起こしてしまいます。 というわけで、今回は日本語の文字を文字数で切り取る方法を作りました。 まずは、日本語文字数の数える関数を作ってみます。 def jp_chr_num(strng) jp_strng_chrs = Array.new jp_strng_chrs = strng.split(//) jp_chr_num = jp_strng_chrs.length return jp_chr_num end このように、文字列を"//"でsplitすることで 文字を日本語の文字単位で分割することができます。 さらに、これを
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 = "ho
INDEX PAGE 半角 全角の変換関数を作る INDEX PAGE Rubyはやはり文字列の扱いがとっても便利だなぁと感心します。 今回全角文字を半角文字へ、半角文字を全角文字へという処理を作ったのですが いとも簡単にできてしまいました。 require 'jcode' ##アルファベットを全角から半角へ str = str.tr( 'A-Z','A-Z' ).tr( 'a-z','a-z' ) ##数字を全角から半角へ str = str.tr( '0-9','0-9' ).tr( '.','.' ) jcodeを利用するのが味噌のようで これさえ利用しておけば日本語でもしっかり処理してくれます。 という感じでできてしまいました。 しかし、カタカナは少し苦労しました。 が、下のサイトが参考になりました。 http://www.moodindigo.org/blog/archives/
INDEX PAGE ドメインの異なるサイトでセッションを共有する Railsの1.2移行では、セッションはデフォルトではCookieを使用しているので サーバーが分散していてもセッション共有することができます。 ※携帯サイトなどでは方式を検討する必要がありますが。 さてー実際には一つのサイトだけど サイトの趣旨によってドメインを分割しているということもあると思います。 http://a.xxxx.co.jp/hoge.html http://b.xxxx.co.jp/hoge.html http://c.xxxx.co.jp/hoge.html どれかでログインした情報を全てで利用したいなどです。 TOMCATなどでは、ドメインが異なるとセッションの共有は不能でしたが Railsでは設定次第では可能なようです。 config/enviroments.rbにて45行目付近に config.
INDEX PAGE ActionMailerでエラーをハンドリングする LoginEngineのメール通知機能をいじる中でActionMilerを設定しました。 当初あまりちゃんと設定しなくても、メールが送信できて喜んでいたのですが 少し動かしていくうちに色々はまりました。 ActionMailerを動かすためには メールサーバーなど色々設定しないといけないようです。 環境ごとにメールサーバーが異なるようなら condfig/environments/xxxx.rb 環境ファイルで、環境にかかわらず設定が一緒なら condfig/environment.rb に下記のように設定すればよいです。 ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.raise_delivery_errors = true ActionM
INDEX PAGE エラー画面、エラー処理 Webアプリ上でエラーが発生した場合の処理方法ですが 例えばJsp/Servletの場合には、エラーを呼び出し元にスローしていき 最終的に一番呼び出しもとのプログラムで例外をキャッチし エラー画面にリダイレクトするという流れとなると思います。 Railsの場合には、基本的にそんな面倒なことはしなくても ApplicationControllerの中で下記のように書くだけでエラーページが実装されます。 def rescue_action( excptn ) redirect_to :action => 'error', :controller => '/error' end Rubyでは、基本的に例外やエラーは上に上がっていくので Javaのようにthrowを書かなくても 処理されなかった例外は全てこの「rescue_action」で拾ってくれま
INDEX PAGE RailsでCSV出力処理を実装する Railsでデータのエクスポート処理を作ろうとして CSVの出力共通関数を作ろうとしたのですが Railsには既に便利なCSV出力機能が備わっていました。 CSV::Writerというライブラリを利用すると便利です。 http://www.sakalab.org/prog-ruby/ruby-man-html-20080121/CSV_Writer.html 使い方は、まずrequireでcsvライブラリを記述します。 require 'csv' 続いて、実際にファイルの生成と、 生成したファイルをリプライする方法ですが、こんな感じです。 class hoge def exprt ##データベースからの検索処理 hoges = Hoge.find(:all) ##出力ファイルのコンテンツタイプの決定 cntnt_type = ""
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型のカラムに対応させる リンク用ボタンを作る 外部のサイトへリンクする 改行を表現する <% %>と<%
INDEX PAGE Ruby On RailsにLoginEngineの設定をしました 書籍やWebのページにはRuby On Rails1.2系の設定例が多かったのですが Ruby On Rails2.0系ではこの方法ではまったく動きませんでした。 /config/environment.rb を編集するのは一緒なのですが、1.2系では下記サイトのように設定するらしいのですが http://uyota.asablo.jp/blog/2006/09/30/542977 2.0系では、下記のように書きました。 # Be sure to restart your server when you modify this file ##文字コードの設定 $KCODE = 'u' # Uncomment below to force Rails into production mode when
INDEX PAGE Ruby On RailsにLoginEngineを導入しました。 Ruby On Railsのバージョンは2.02だったのですが 書籍やWeb上の情報どおりに導入してもまったくうごかず、かなりはまりました(>_<) #######導入バージョン############################## OS WindowsVista 開発環境 pleiades-all-in-one-ruby + RadRails Ruby 1.8.6 Ruby On Rails 2.0.2 Engines 2.0.0 LoginEngine 1.0.2 ################################################### ※pleiades-all-in-one-rubyは下記サイトより取得 http://mergedoc.sourceforge
このページを最初にブックマークしてみませんか?
『RubyBeginner (ルビギナー)の世にも奇妙な開発』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く