Rails

type_castに気がつかなかった。User.new(:school_id => @school)はだめなのね

とんでもない見落としをしていた。こんなテストコード書いてた。 fixtures :pay_types def test_record o = Order.new(:pay_type_id => pay_types(:one)) assert_equal o.pay_type, pay_types(:one) ... end このテストは通りますが、やってはいけない書き方…

railsのテストのuse_instantiated_fixturesはあまり良くないと思った

最近になって昔書いたrailsのコードを読むと、名前が悪いと思うところが多い。例えば。 blog_controller.rb class BlogController < ApplicationController def blog_comments end end とか、blogに対するコメントであることは、コントローラがBlogControlle…

RailsでMySQLのENUM型を使う方法

DBのカラムで、ステータスの様なカラムを扱いたい場合、ENUM型を使いたいことが多いです。 例えばこんな感じ CREATE TABLE blog_comments( id INTEGER NOT NULL AUTO_INCREMENT, blog_id INTEGER NOT NULL, commenter VARCHAR(40) NOT NULL, content TEXT NO…

libディレクトリの使い方とオートロード機能

この関連ではまったので、自分用にメモしておきます、 libディレクトリの使い方 railsのRAILS_ROOT/libディレクトリには、プロジェクトで使用するライブラリを置いておきます。 例えば、既存クラスに機能を追加したい場合、まず追加機能を書いたファイルを用…

railsやりたい!って思った時に最初にやる設定 for Win

研修用に作成です。Windowsにrailsの開発環境を設定するまでを書きます。家にはMacしかないので、必要な部分は引用してあります。 構築する環境 構築する環境は以下の通りです。全てフリーです。 ruby 1.8.6(mswin) rails 1.2.3 mysql 4.1 EmEditor rubyのイ…

validates_uniqueness_ofのscopeオプションを使う際の注意

scopeオプション RailsのActiveRecord::Base.validates_uniqueness_ofは次のような使い方ができる。 class Comment validates_uniqueness_of :blog_id, :scope => :user_id これは、commentsデーブルに、同一のuser_idに対するblog_idは一意である。という制…

edge railsでto_dateがprivateになった

edge railsというのは、今マシンにインストールされているrailsのバージョンと異なるバージョンでアプリケーションを開発したい際に使います。 これを使えば、アプリケーション内にrails環境を構築でき、自分のマシンのrailsのバージョンを上げても影響を受…

Re:Railsで日時をスマートに表示させる

Railで日時(created_at)をスマートに表示させる - ひとりで頑張るWEBアプリ開発 <%= post.created_at.strftime('%Y/%m/%d %H:%M') %> ActiveSupportの拡張を使うといいかも さっきのはこう書けるようになる <%= post.created_at.to_s(:standard) %> 上記の…

Windowsでテスト結果を見やすくする

Macのautotestの記事とかを見て、autotestは毎回走るところがちょっとなと思っていたのですが、あの色が付いたテストはいいなーって思って、Windowsでやってみました。 スクリーンショット こんな感じになります。大量のテストを行うと、こけた箇所が分かり…

開発途中のアプリケーションをローカル環境に入れるメモ

今回は、誰かが開発しているRails アプリケーションを、自分のローカルで起動まで持っていくために必要な手順を書きます。 ただ、マイグレーションファイルがあったり、rake db:setup で全部できちゃう(アプリケーションのDBセットアップをするためのRaketa…

Duck Typing

最近コードと書く上で使っていきたいなと思ったので勉強。 Duck Typing (ダックタイピング)とは 定義 結論から書くと、「あるオブジェクトがアヒルのように歩き、アヒルのように話すなら、Rubyインタプリタはそのオブジェクトをアヒル」とみなす。この考え方…

プルダウンリストの作成(select)

いつも忘れて調べているのでメモ。 基本 select select(:user, :sex, User.sex_choices) 第3引数には、プルダウンリストに表示される値と、その値に関連付けられた属性値を配列の形で示す。これは、ビューに直接書くよりはモデルかヘルパーに出しておいたほ…

Timeオブジェクトの等価でちょいはまった

Railsのテストでこんなメッセージが出た expected but was . あれ?なんでテスト落ちるんだろう。 irbで確認 irb(main):002:0> a = b = Time.now => Sat Mar 29 20:07:31 +0900 2008 irb(main):003:0> a == b => true これは当たり前だ。同じオブジェクト指…

Enumerable#sumが便利だ

集計メソッドを作りたいと思った 集計メソッド こんなクラスが3つあるイメージ。 class Hoge class << self def count 1 end def find [:hoge] end end end class Fuga class << self def count 2 end def find [:fuga] end end end class Wib class << self…

アプリケーションのDBセットアップをするためのRaketaskファイル(setup.rake)

アプリケーションをセットアップするのをRakeでやりたい やることは以下の3つ DB作成 DBスキーマ定義 初期データ作成 2,3番目はmigrationを使います create_user.rb class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.…

Railsでのブール型(Boolean)の扱い

今回、railsでブール型を使った(正確にはmigrationのtypeに:booleanを指定した)ので、Railsでブール型を使う際の注意などをメモしておきます。 ブール型の扱い テーブルのカラムをマイグレーションで定義する際に以下の様にすると、Railsはそのカラムをブ…

トランザクションのテスト

RailsでActiveRecord(DB)のトランザクション処理をテストする際のメモ。 トランザクション処理 簡単な例として以下のコードを考える。 class User def destroy_with_transaction User.transaction do destroy raise end end end テストコードを書く User#d…

method_missingとfind_by_xxx

Refactormycodeを見てたら、method_missingを使った例があったので、試しに使ってみた。 method_missingとfind_by_xxx Railsには、このmethod_missingを使ったハックがある。find_by_name、find_all_by_nameとかのfind_xxxメソッドだ。 method_missingは通常…

Hash引数便利よね

Railsの引数としてのHashの使い方上手いよな Ruby on Railsのメソッド引数って、Hashが多いですよね。しかも、HashのキーとしてSymbolが使えて凄く直感的に書ける。 Hashを使った引数 redirect_to :controller => "user", :action => "home" なんでもかんで…

render :templateで意味不明なエラーにはまった

やったこと コントローラで、動的コンテンツのURLを生成し、それをビューで表示するロジックを書いた。 def show @content = Content.find_by_id(params[:id]) @url = @countent.url render :template => "/users/common/content" end そして、テストコード…

テスト用インスタンス生成ヘルパー

ふと思った テストの際に、invalidなインスタンスを作成したり、検索テスト用に、対象カラムだけの値を変えたようなインスタンス/レコードを作成することが多い。 その際に、全てのカラムを指定するのが面倒だったりする。特に、validate_presence_ofとかの…

CSVアップロード

ユーザーをCSVアップロードで登録する機能を実装してもたのでメモ。コントローラのコードが長かったり、メソッドの名前があまり良くないので、もっといい方法を見つけたら追記していきたい(*´艸`) View まずは簡単なビューから csv_upload.rhtml <% @title=…

validationのエラーメッセージ(error_messages_for)の日本語化

何が問題か RubyOnRalsには、ライブラリとして便利な機能がデフォルトで提供されている。「error_messages_for」もその1つ。これは、ユーザーがフォームからデータを送信してきた時、内容にもれがあったり、値が不正であることをメッセージとして出力するも…

formでもconfirm

ちょっと悩んだのでメモしておこうと思います。 何が問題か Ruby on Railsのヘルパーメソッド「link_to」は、以下のようにすると、確認用のダイアログを出してくれます。 ダイアログで「OK」を押した場合は指定したリンク先である「Google」のトップに飛び、…

昇順ソートでNULLを後ろにもってくる方法

MySQLの昇順ソートの問題 それは、昇順でソートすると、基準カラムがNULLの場合、それが先頭に来ることだ。実装としては正しいかもしれないが、NULLが最後に来てほしい場合もある。 しかし、MySQLには(少なくとも4.1系には)それを指定するオプションがない。…

特定のバージョンを指定してインストール

gem install rails --version 1.1.6 --include-dependencies

携帯アプリで固体識別番号を聞く

何がしたいのか 携帯向けのアプリケーションを使っていると、認証用などに、固体識別番号を取得したい場合がある。その際の処理。 使用するプラグイン 今回は、Railsで携帯アプリを作る際に便利なプラグインとして「JpMobile」を使うことにする。 固体識別番…

メソッドのベンチを取る

modelのインスタンスメソッドのベンチを取る def test_method(arg) require 'benchmark' Benchmark.bm(12) do |x| x.report do 1000.times do #実際の処理 end end end end 後は、script/consoleからこのメソッドを実行。 付属機能を使ってもいい ruby scrip…

選択カラムでの並び替え

何がしたいのか 例えば、usersテーブルがあり、それはアカウント情報だけを保持しているとする。そして、それを参照するテーブル、students、teachersがあるとする。それぞれ、生徒にしかない情報、先生にしかない情報を持っている。 この時、User一覧を取得…

Webrickとlighttpdの競合

script/serverでlighttpdが立ち上がる lighttpd+faseCGIを使っていると、デフォルトではlighttpdが立ち上がる。webrickで立ち上げたい場合は、以下のようにする。 ちょこっとはまったのでメモる。 [root@server trunk]# ruby script/server webrick -d -p 80