2012年7月27日金曜日

[rails]vimでerbを書く時に便利なあれこれ

ul>li*3とかって書くと以下のように展開してくれるzencoding.vimがかなり便利なので、入れると良いと思います。
 
使い方
http://mattn.kaoriya.net/software/vim/20100306021632.htm 
インストール方法
http://d.hatena.ne.jp/sakurako_s/20110126/1295988873
↑のサイトに書いてある方法でMacにインストールしたら何かエラーがわらわら出て動かなかった。plugin/zencoding/と言うディレクトリも全部.vim/plugin以下にコピーしたら動いた。

2012年7月26日木曜日

[Rails]モデルがバリデーションに引っかかってないかチェックする

ActiveRecordでオブジェクトを作った後に#invalid?メソッドを実行すると、バリデーションに引っかかって無いかチェックできる。
class Person < ActiveRecord::Base
  validates_presence_of :name
end

Person.create(:name => "John Doe").valid? # => true
Person.create(:name => nil).valid? # => false
※参考サイトから引用

あと、#errorsを実行すると、バリデーションで見つかった全てのエラーを取得できる。

参考   http://wiki.usagee.co.jp/ruby/rails/RailsGuides%E3%82%92%E3%82%86%E3%81%A3%E3%81%8F%E3%82%8A%E5%92%8C%E8%A8%B3%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%82%88/Active%20Record%20Validations%20and%20Callbacks

[Rails]ActiveRecordで代入を許すカラムを明示する

なんかscaffoldでモデルを作ったら、モデルにattr_accessibleと言うのが付け加えられていた。
 
# encoding: utf-8
class Product < ActiveRecord::Base
  attr_accessible :description, :image_url, :price, :title
end

これ何?と思って調べてみたら以下のサイトを見つけた。

 attr_accessible と attr_protected

どうも意図しないカラムに値が代入されないように制限したり(attr_protected)、代入しても良いカラムを明示したり(attr_accessible)する物っぽい。

なんか使ってみないと良く分からないから後で考えよう。

%記法

あー%{}で空白で区切った文字列を書くと、文字列の配列になるんですねぇ。
 
%w{ a b c }
#=> ["a", "b", "c"]
※このサイトの"%記法"の所参照
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fliteral.html

2012年7月24日火曜日

[Ruby]Array#group_byなんて便利そうなメソッドがあったんだへー

配列に対して#group_byと言うメソッドを実行して、ブロックで条件を渡してあげると、条件別に要素を分類してハッシュを返してくれるメソッドがあるらしい。

これは便利そう。
http://ref.xaio.jp/ruby/classes/enumerable/group_by

Arrayが持つその他のメソッドは、以下のWebサイトが参考になる。
http://www.namaraii.com/rubytips/?%C7%DB%CE%F3

[Rails]デバックをする時だけ使うメソッドやツール

Rails console

railsのディレクトリに移動してrails console(またはrails c)と打つと、irb見たいな対話実行環境が立ち上がってアプリ内で定義したモデルとかが自由に使える。

ちなみにGemfileにgem 'pry-rails'と追記してbundle installするとrails consoleがpryになる。

オブジェクトのコピーを作成

例えば、何かのオブジェクトを一覧で表示するようなviewを作っていた場合に、表示対象のオブジェクトが沢山あった場合にどんな見栄えになるか試したい時があると思う。

表示対象のオブジェクトが、簡単にデータを準備できる物なら良いんだけど、例えば、多対多の関連を持っていて中間テーブルがあるモデルだったり、関連する別のモデルをincludeしているデータだったりすると、ダミーのデータを大量に作成するのが面倒臭い。

テストコードを書くならならFactory Girlなどを使えば良いと思うんだけど、ちょっとviewの見栄えを確認する用途には向いてない。そんな時は、ダミーのデータを1つ作ってオブジェクトをコピーすると便利。

やり方は簡単で、コピーしたいオブジェクトの#copyと言うインスタンスメソッドを呼び出せば良い。#copyを実行する事でレシーバーのコピーが返却される。#copyは参照をコピーするだけで、値まではコピーしてくれないけど、とりあえず、viewの見栄えを確認するだけならこれでも役に立つ。

例えば以下のようにするとobjのコピーを100個作って返却してくれる。
しかも、#copyはObjectのインスタンスメソッドなのでほとんどのオブジェクトをコピーする事ができる。
 
def create_dummy_array(obj)
  dummy = []
  100.times do
    dummy << obj.dup
  end
  dummy
end

.all

モデル(例えばUser)に対してUser.allと言うメソッドを実行すると、全userのオブジェクトを返却してくれる。プロダクトを作る上で、全レコードが必要な事ってあんまり無いし、全レコード取得したら重たくて使えない場合が多いとは思うけど、デバックの時にはたまに便利。

.delete_all

User.delete_allでUserの全レコード削除。これもデバックの時にはたまに便利。

2012年7月23日月曜日

iPhone向けwebアプリを作るときiOSシミュレーターが便利

MacにXcodeインストールすると、こんなの↓が同梱されているので、iPhone/iPad向けのWebアプリを作っている時に便利です。


なんか、iOSシュミレータの実行ファイルはすごく深い階層にしまい込まれているので、以下のサイトを参考に探すと良いかと思います。
http://harayu.com/web-work/xcode4-3-ios-simulator-5-0

Xcode4.3以降、実行ファイルの場所が変わっていたのでメモ。