ruby

open_sessionで特異メソッドを定義するときの注意

open_sessionで特異メソッドを定義したら、変数の持ち主に注意しましょうというお話。 次のように定義したとします。 def user open_session do |u| def u.access_to_home get '/home/index' end end end まず、これはエラーなく実行できます。 get '/home/i…

vimで編集中のrubyテストを実行できるプラグイン

vimでrubyのテストを編集しているとき、テストメソッドごとに結果を確認しながら書き進めたいことなどないでしょうか。 ruby test/unit/hoge.rb -n test_fuga でテストメソッド単位の実行はできるけど、テストケース名が長かったりするとかなり面倒・・・ と…

演算子の優先順位

演算子の優先順位を意識していないと予想外の結果になることがあるので注意しましょうというお話。 和集合を代入したい場合 irb(main):001:0> hoge = nil || 'hoge' => "hoge" irb(main):002:0> hoge = (nil || 'hoge') => "hoge" 結果は同じ。 和集合を配列…

簡易アラーム(カウントダウン)

rubyでカウントダウンアラームを作ってみました。 実行時に「○○分」の数値を引数として渡す 10分前に1回、5分前に3回、時間になったら10回ビープ音が鳴る ビープ音を鳴らすには? Windows環境のため、rubyプログラム中で echo ^G コマンド(バッチファイルに…

HashでArray#map!(collect!)のようなことを実現する

意外とハマったのでメモ。 例えば、配列の各要素を数値から文字列に変換したいと思ったら、map!(collect!)メソッドを使って実現できます。 array = [1, 2] array.map!{|item| item.to_s} #=> ["1", "2"] では、これと同様のことをハッシュで行う(各キーに…

コールバックメソッドのカプセル化

複数のテーブルの任意のフィールドにおいて、レコード保存時に同一の処理を行いたかったので、before_saveメソッドをカプセル化するハンドラを作成しました。 共有したいコールバックメソッドを定義したハンドラクラスを、app/models下に作成 class Hoge def…

ActionMailer基礎とヘルパーの指定

コードリーディングの際にActionMailerに触れたので、覚え書き。 ActionMailer基礎 メーラクラスapp/models/hoge_mailer.rb class HogeMailer < ActionMailer::Base def fuga() … end def piyo() … end end メールテンプレートapp/views/hoge_mailer/fuga.rh…

Twitterからmixiボイスへのポスト

自分で書いてみようかと思っていたのですが、rubyスクリプトを公開している方がいらっしゃったので拝借しました(笑) ちなみにrubyのバージョンは1.8.6です。 ライブラリをインストール $ gem install mechanize $ gem install rubytter Mechanizeインスト…

マイグレーションファイルに外部ファイルのロジックを持ち込んではならない

以前railsで、『あるテーブルのレコードの配列を取ってきて、その配列の順番を数値として既存フィールドに上書きする』というのをマイグレーションで実行したことがありました。 このマイグレーション(VERSION=1 とします)でやらかしていたことが後から判…

ERBでcase文を使うとsyntax errorになる問題

railsのビューで <% case params[:action] %> <% when 'hoge' %> ほげ <% when 'fuga' %> ふが <% end %> としたら、"syntax error, unexpected tIDENTIFIER, expecting kWHEN" というエラーが出ました。 次のように書かなければならないようです。 <% case …

【Rails:6】コントローラとビュー(応用編)

セッション セッションあるユーザからのリクエストを、他ユーザのものと区別するための接続情報。通常サーバは、複数のリクエストを受け取ったとき、すべて独立したものと見なします。ユーザのログイン状態を保持したい場合などは、ユーザとサーバの接続状態…

【Rails:7】データベースとモデル(応用編)

リレーションシップ リレーションシップテーブルとテーブルの関連のこと。 外部キー別のテーブルの主キーを参照するフィールド。 参照先テーブル(entries) id(主キー) title 1 8/1の日記 2 8/2の日記 3 8/3の日記 参照元テーブル(comments) id entry_i…

【Rails:8】セキュリティとAjax

セキュリティ SQLインジェクションWEBアプリケーションに対して、不正にデータを操作したり、任意のSQL文を実行させてしまうような攻撃。 危険な式次のように、変数を直接SQL文に埋め込むコードは危険です。 # params[:owner_name] = "hoge" のとき Mail.fin…

Hpricotを使って、文字列に含まれるHTMLタグを取得

先輩にHpricotというライブラリを教えて頂いたので、これを使ったモジュールを作ってみました。 やりたいこと 特定のタグ以外は非推奨タグとする 文字列strに含まれるHTMLタグを調べる 非推奨タグが含まれていたら、その部分(開始タグ〜終了タグの文字列)…

【Rails:4】MVCの連携

フォームとモデル フォームとモデルの連携レコード(モデル)⇔コントローラ⇔フォーム(ビュー) フォームの作成(ビュー) <% form_for :mdlname, @objname, :url => {:action => actname, :id => @objname}, :html => {:class => 'formname'} do |form| %> …

【Rails:5】テスト

テストとは テストアプリケーション開発において、ソフトウェアが正しく機能するかどうか調べる作業。テストスクリプトには、仕様書/設計書としての役割もあります。railsではテストが重視されており、テストに必要な機能が用意されています。 単体テスト(t…

【Rails:3】データベースとモデル

データベースとモデル リレーショナルデータベース データベース モデルオブジェクト レコード(行) ひとつのデータ フィールド(列) データの属性 テーブル レコード×フィールドの集合 ORM(Object-Relational Mapping)データベースのレコードとオブジェ…

【Rails:2】コントローラとビュー

HTTPの基礎 HTTP::ブラウザとサーバが情報を送受信するための通信手段 リクエスト(ブラウザがサーバに送る要求) GET /ctr_name/index HTTP/1.1 (以下、ブラウザとサーバに関する情報=HTTPヘッダ) … … レスポンス(サーバがブラウザに返す応答) HTTP/…

【Rails:1】Ruby on Railsの概要と導入

Ruby on Railsについて 『Ruby on Rails』とはRubyでWEBアプリケーションを開発するためのフレームワークのひとつ。デンマーク人のプログラマ、David Heinemeier Hansson(デビット・ハイネマイヤ・ハンソン)氏がオープンソースソフトウェアとして開発しま…

IEにおけるJPEG画像のMIMEタイプ

railsでJPEG形式の画像アップロード機能を実装したところ、FirefoxやChromeでは問題なく動作したのですが、IEだと『画像形式がJPEGではない』と認識されてしまいました。 原因は以下でした。 IEでは、JPEG画像のMIMEタイプは image/pjpeg となる プログレッ…

2つのテーブルを使用した検索

やや複雑な検索×ページネーションの実装で悩んでいたとき、find_by_sqlなるメソッドの存在とテーブル結合のことを知り、いたく感動したので以下覚書き。 ・・・だいぶ前の話ですが(笑) やりたいこと テーブルとカラム カテゴリ(親テーブル)::タイトル …