rails

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

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

JSONによるWEBアプリとiPhoneアプリのAPI連携

RailsアプリケーションでJSONデータを返すAPIを実装し、iPhoneアプリから受信する方法をご紹介します。 環境 Rails 1.2.3 json 0.4.1 [gem] iPhoneSDK 3.1.3 json-framework 2.2.3 iPhoneアプリ json-framworkというフレームワークを使ってJSONを扱うことが…

イベントハンドラからrailsのAjaxアクションを呼び出す

RTMの設定みたいに、ラジオボタンをポチポチ押したらrailsのAjaxアクションが実行されるコードを書いていて思ったこと。 イベントハンドラから、JavaScript関数ではなくrailsのAjaxアクションを呼び出したい場合には、remote_function メソッドを使います。 …

テキストボックスのテキストを全選択&編集不可にする

テキストボックスの中身をコピペしやすくするためには、下記をオプションで指定するのがよいでしょう。 (サンプルを示したいのですが、はてダでは表示できないようです) クリックするだけで全選択: onclick="this.select()" 中身のテキストは編集不可: r…

子コントローラで特定のフィルタを無効化する

親コントローラで定義した before_filter / after_filter はすべての子コントローラに継承されますが、「この子コントローラではフィルタを外したい」ということがあります。 これは skip_before_filter / skip_after_filter を使って実現でき、オプション(…

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

複数のテーブルの任意のフィールドにおいて、レコード保存時に同一の処理を行いたかったので、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…

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

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

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

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

Railsのログ監視&デバッグをcoLinuxで行う

ログの監視 Windowsでrails開発していた頃は、デバッグ方法の一つとしてコマンドプロンプト×pメソッドを利用していました。 が、coLinux開発だとコンソールには何も表示されない! => 嘘。これは -d オプションで立ち上げた場合でした。 いちいちログファイ…

【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…

HTMLタグ周りのヘルパーメソッド

HTMLタグだけエスケープしないヘルパーメソッド railsではよく、XSS攻撃対策としてhメソッドを使いますが、はてダのようにHTMLタグをタグとして認識させたい場合、hメソッドは使えません。 HTMLタグだけタグとして認識させ、その他の危険要素はエスケープで…

【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(デビット・ハイネマイヤ・ハンソン)氏がオープンソースソフトウェアとして開発しま…

rakeが終了したらビープ音で知らせる

rake走らせて別の作業をしていると、終了したことに気づかず十数分放置・・・みないなことがよくあるので、rakeの終了をビープ音で知らせてくれるシェルスクリプトを書きました。 【環境】 railsアプリ:: /home/admin/apps/hoge 【スクリプト】 /home/admi…

coLinuxログイン後、railsアプリのWEBrickを自動起動する

生粋のWindowsユーザだった私ですが、最近coLinuxを導入し、rails開発をそちらに移行しようと考えています。 そこで、開発中のrailsアプリでWEBrickを起動するシェルスクリプトを書いてみました。 【環境】 railsアプリ:: /home/admin/apps/hoge coLinuxロ…

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

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