ActionMailer::Baseをインスタンス化できない

メモ ActionMailerの単体テストを書こうと思い、最初はActionMailer.deliver_???のテストを書いたが次の点が嫌だなと思った。 ・deliver_???は自分で書いたコードではない(???が自分で書いたコードだ) ・???で設定したビューで使用することを設定したイン…

Rspec 他のメソッド呼ぶスペックの書き方

メモ class A def call_other_method other_method1 end def other_method1 end def other_method2 end end describe A, "#call_other_methodを実行した場合" do before(:each) do @a = A.new end it "other_method1を呼ぶこと" do @a.should_receive(:other…

render_to_stringメソッドとBuilderを使ってXML文字列を生成する方法

メモ Builderを使ってXMLのレスポンスを生成するには以下のようにrespond_to()を使うのだが・・・ # ビュー(show.xml.builder) xml.diary do xml.title @diary.title end # Diariesコントローラ def show @diary = Diary.find(params[:id]) respond_to do …

ActiveRecordが生成するSQLをRailsのコンソールで確認する方法

メモ ActiveRecordが生成するSQLは通常、/log/development.logなどのログファイルに吐かれるが、これをRailsのコンソールに出力する方法。 実はとても簡単でログの吐き出し先を標準出力に指定するだけ。 ruby script/console # ログの出力先を指定する。以上…

バージョンを指定してRailsスケルトンを作成する方法

メモ 複数バージョンのRailsをインストールしている場合にRailsスケルトンを作成すると、インストールされている中の最新のバージョンのRailsスケルトンが作成されるが、他のバージョンのRailsスケルトンを作成するには次のようにする。 # rails _version_ a…

アクションの中のrender(), redirect_to()の後の処理は実行される

メモ render(), redirect_to()は通常、アクションの最後の処理なので、これらのメソッドの後に処理を書くことは稀だと思うが、書けば書いたでちゃんと処理を実行してくれるようだ。 def create @diary = params[:diary] respond_to do |format| if @diary.sa…

Railsのコンソールからコントローラのアクションを呼び出す方法

メモ Railsのコンソールからコントローラのアクションを呼び出せるとちょっとしたテストに便利そうだなと思っていたらやっぱりできるようだ。 ruby script/console # ①URIとメソッドを指定する。 ENV['REQUEST_URI'] = "/example/index/" ENV['REQUEST_METHO…

自前Array#each()

メモ Array.prototype.each = function(f){ for(i=0; i < this.length; i++){ f.call(this, this[i]); } };

複数のキーでソート

メモ class User attr_reader :id, :name def initialize(id, name) @id, @name = id, name end end class Array def custom_sort(orders) self.sort do |a, b| Array.compare(a, b, orders) end end def self.compare(a, b, orders) orders.each_with_index…

インスタンスメソッド・定数・クラスプロパティ・クラスメソッド・プライベート変数の書き分け

メモインスタンスメソッドとクラスで使用する定数はprototypeオブジェクトに設定する。 このようにすることで内部的な効率がよくなるため。 var Person = function(name, gender){ this.name = name; this.gender = gender; } Person.prototype.getName = fu…

カリー化

メモ function bindArguments(f){ var boundArgs = arguments; return function(){ var args = []; for(var i = 1; i < boundArgs.length; i++) args.push(boundArgs[i]); for(var i = 0; i < arguments.length; i++) args.push(arguments[i]); return f.app…

call()とapply()の違い

メモ関数オブジェクトのcall()メソッドとapply()メソッドの違いは、後者は第二引数を配列形式で指定する点だけが違うのかと思っていたが引数を受け取った側の引数の扱いも違うようだ。 var f = function(){ return arguments.length; }; f.call(this, [1,2])…

アップロードファイル.readは1回だけ有効。

ファイルのアップロードではまったのでメモ。 file = params[:attachment] file.read # => ファイルの中身 file.read # => "" 空の文字列 とするとアップロードしたファイルの中身を取得できるが、このreadは1回しか有効じゃないみたい。 同じファイルに対し…

!!って何?

prototype.jsを少しずつ読み解く。自分用メモ。 var Prototype = { Version: '1.6.0.1', Browser: { IE: !!(window.attachEvent && !window.opera), Opera: !!window.opera, WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, Gecko: navigator.us…

Ajax対応したwill_paginate(Version 2.3.5) For Rails2.2.2

will_paginateをAjax対応させる方法をネットで探していて見つけたxibbarさんの記事 http://d.hatena.ne.jp/xibbar/20080612#1213252219残念ながら私が使っているRailsやwill_paginateのバージョンと噛み合わず動作しなかったため、xibbarさんの記事を参考にA…

Stringの連結 +=と<<の違い

+=の場合(予想通りの結果になる) a = "a" b = a b += 'b' p b # => "ab" p a # => "a" a = "a" b = a b << 'b' p b # => "ab" p a # => "ab"

MySQL varchar(n)のカラム長

メモ MySQL varchar(n)のカラム長はバイト数ではなく、文字数。 よって、varchar(10)であればマルチバイト文字でも10文字可能される。以下を参考にしました。ありがとうございます。 http://d.hatena.ne.jp/sotarok/20070821/1187707045

クラスメソッドから擬似的にインスタンスメソッドを呼ぶ

メモ Class Foo def self.foo bar end def bar 'bar' end end Foo.foo #=> NameError : undefined local variable or method `bar` for Foo:Class などとクラスメソッドから同クラスのインスタンスメソッドを呼ぶと怒られるが Class Foo def self.foo f = Fo…

ActiveRecordはテーブル定義の初期値を認識する

メモ CREATE TABLE `tables` ( `flag` char(1) NOT NULL default '0' ); などというテーブルがあったとして、このテーブルに対応するモデルのインスタンスを作るとflagには'0'が入る。 t = Table.new p t.flag #=> '0' これは便利。今までSQLを書くのが面倒…

同じクラスに同じ名前のインスタンスメソッドとクラスメソッドが定義できる。

メモ class Foo def foo 'instance method' end def self.foo 'class method' end end f = Foo.new f.foo #=> 'instance method' Foo.foo #=> 'class method'

条件を保持するpagination

モデル(Memo)に検索をするアクション def search @memo = Memo.new(params[:memo]) @memo_pages, @memos = paginate :memos, :per_page => 10, :conditions => ["memo like ?", "%#{params[:memo][:memo]}%"] render :action => 'list' end listビューのpagi…

我が家のPCでリモートインストールを行うとやたら時間がかかる。

また、遅いだけならまだしも遅い為か何度やってもActiveRecordのインストールに失敗する。gem install rails Bulk updating Gem source index for: http://gems.rubyforge.org ↓(約40分後) Install required dependency activesupport? [Yn] ↓(約10分後)…

パーマリンク設定にはまる & その脱出方法

パーマリンク設定の基礎中の基礎に長らくはまっていたがようやく脱出できたのでメモる。1. 何がしたかったか?URLをデフォルトの「example.com/?p=123」ではなく「example.com/about/」のようにしたかった。(=投稿スラッグを使いたかった)2.何をしたか? …

メソッド定義の際にdef メソッド名=()とするとそのメソッドに=を使って引数を渡すことができますがが、一般的なdef メソッド名()と引数の渡し方が異なるほかに前者は書込み(代入)Onlyということがわかった。

まず一般的なdef メソッド()では書込み・読込みどちらも可能。 class Foo def self.bar(arg = nil) @@arg = arg || @@arg end end #書込み Foo.bar("Hello World!") => "Hello World!" #読込み Foo.bar => "Hello World!" 次にdef メソッド名=()では書込みオ…

コレクションを含むフォームを作る際の注意点

【自分が躓いたので忘れぬようメモ】コレクションのフォームエレメントをヘルパーで生成する際モデル名にあたる部分に[]を付ける。 text_field("model_name[]", "column_name") すると以下のHTMLが生成される。 # コレクションのインスタンスがnew_record? =…