NetbeansのRuby on Rails ショートカット

Netbeansを使っていて、Ruby on Railsの開発をしているときに、
良く使っている、有用性の高いものをまとめておきます。

キーボードショートカット

CTRL + SPACE	コード補完
CTRL + /	コメント/アンコメント
CTRL + Q	最後の編集箇所に戻る
CTRL + G	行番号にジャンプ
ALT + SHIFT + F	コードの整形
CTRL + SHIFT + A	ViewとControllerの行き来
CTRL + 1	プロジェクト
CTRL + 4	出力
CTRL + 7	ナビゲータ

コードスニペット

スニペットを入力してTabキーを押すことで使用できます。

r	<% %>
re	<%= %>
:	ハッシュ :key => "value"

Rails3 でタグが自動的にエスケープされるようになった

Rails2までは、HTMLタグのエスケープは自動的にはされず、明示的に、ヘルパーメソッドhを介す必要がありましたが、
Rails3では、<%= ... %>で出力される値が暗黙的にエスケープ処理されるように変更になりました。
これをエスケープさせずにそのまま出力したい場合には、rawメソッドが利用可能です。

Rails2 での動き

<%= "<br/>" %>
↓
<br/>
<%= h "<br/>" %>
↓
&lt;br/&gt;

Rails3 での動き

<%= "<br/>" %>
↓
&lt;br/&gt;
<%= raw "<br/>" %>
↓
<br/>

Rails3(おまけ)

これでもOK!ヘルパー側で処理したくない場合に。

<%= "<br/>".html_safe %>
↓
<br/>

rails3 で will_paginate

Gemfileを以下の通り修正

gem 'will_paginate', '3.0.pre2'

そして、以下のコマンド

$ bundle install

すると、なにやら以下の通りエラーが出ます。

/usr/local/rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/format.rb:32:in `from_file_by_path': Cannot load gem at [/vol/xxx/vendor/bundle/ruby/1.8/cache/will_paginate-3.0.pre2.gem] in /vol/xxx (Gem::Exception)
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/rubygems_integration.rb:100:in `spec_from_gem'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/source.rb:77:in `fetch'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/installer.rb:50:in `run'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/spec_set.rb:12:in `each'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/spec_set.rb:12:in `each'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/installer.rb:49:in `run'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/installer.rb:8:in `install'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/cli.rb:222:in `install'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/vendor/thor/task.rb:22:in `send'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/vendor/thor/task.rb:22:in `run'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/vendor/thor.rb:246:in `dispatch'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/lib/bundler/vendor/thor/base.rb:389:in `start'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.15/bin/bundle:13
        from /usr/local/rvm/gems/ruby-1.8.7-p352/bin/bundle:19:in `load'
        from /usr/local/rvm/gems/ruby-1.8.7-p352/bin/bundle:19

どうやらこのエラーの場合、rootで実行する必要があります。

# bundle install
(略)
Installing will_paginate (3.0.pre2)
Your bundle is complete! It was installed into ./vendor/bundle

完了

file_columnプラグインにおけるurl_for_file_columnとurl_for_image_columnの違い

  def url_for_image_column(object, method, options=nil)
    case object
    when String, Symbol
      object = instance_variable_get("@#{object.to_s}")
    end
    subdir = nil
    if options
      subdir = object.send("#{method}_state").create_magick_version_if_needed(options)
    end
    if subdir.nil?
      nil
    else
      url_for_file_column(object, method, subdir)
    end
  end

url_for_image_columnでは、第三引数optionsは画像のバージョン(:smallとか:large)とかの指定のみに使われます。

  def url_for_file_column(object, method, options=nil)
    case object
    when String, Symbol
      object = instance_variable_get("@#{object.to_s}")
    end

    # parse options
    subdir = nil
    absolute = false
    if options
      case options
      when Hash
        subdir = options[:subdir]
        absolute = options[:absolute]
      when String, Symbol
        subdir = options
      end
    end
    
    relative_path = object.send("#{method}_relative_path", subdir)
    return nil unless relative_path

    url = ""
    url << ActionController::Base.relative_url_root.to_s if absolute
    url << "/"
    url << object.send("#{method}_options")[:base_url] << "/"
    url << relative_path
  end

それに対して、url_for_file_columnでは、第三引数optionsは画像のバージョンの指定ではなく、画像のパスの取得のための、ディレクトリパス指定として使われるようです。

基本的には、url_for_image_columnで画像のバージョン指定をしておけば問題なさそう。

file_columnのインストール(git hub経由)

# rails plugin install git://github.com/tekin/file_column.git
Initialized empty Git repository in /vol/kanrakugai/vendor/plugins/file_column/.git/
remote: Counting objects: 35, done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 35 (delta 4), reused 14 (delta 1)
Unpacking objects: 100% (35/35), done.
From git://github.com/tekin/file_column
 * branch            HEAD       -> FETCH_HEAD

file_Columnのインストール

環境CentOS5.6 ruby1.8.7 Rails3.0.9 ImageMagick6.2.8 RMagick1.15.17

以下だと失敗

rails plugin install git://github.com/tekin/file_column.git

これも失敗

rails plugin install https://github.com/tekin/file_column.git

しょうがないので、以下のサイトから、DownloadsでZIPをダウンロードする。

https://github.com/tekin/file_column

解凍して出来たファイルtekin-file_column-cb5b45e以下をを以下のフォルダにコピーする。

PATH_TO_PROJECT/vendor/plugins/file_column

(参考)
こちらの人も同じようにインストール出来ていなかった。
http://penguin-web.dyndns.org/mountain/blogs/241

CentOS5.6 + Ruby1.8.7 + ImageMagick6.2.8 + RMagick1.15.17

このセットで今一度チャレンジ
既にインストール済みのImageMagick6.7.1をアンインストール

yum remove ImageMagick
(略)
Removed:
  ImageMagick.i386 0:6.7.1-0

Dependency Removed:
  ImageMagick-c++.i386 0:6.7.1-0       ImageMagick-c++-devel.i386 0:6.7.1-0
  ImageMagick-devel.i386 0:6.7.1-0

ImageMagickと関連するパッケージがアンインストールされる。

作業用rpmの保管フォルダを作成します。

# cd /usr/local/src/
# mkdir ImageMagick6.2.8
# cd ImageMagick6.2.8/

rpmのダウンロード

# wget http://mirror.centos.org/centos/5.6/os/i386/CentOS/ImageMagick-6.2.8.0-4.el5_5.3.i386.rpm
# wget http://mirror.centos.org/centos/5.6/os/i386/CentOS/ImageMagick-c++-6.2.8.0-4.el5_5.3.i386.rpm
# wget http://mirror.centos.org/centos/5.6/os/i386/CentOS/ImageMagick-c++-devel-6.2.8.0-4.el5_5.3.i386.rpm
# wget http://mirror.centos.org/centos/5.6/os/i386/CentOS/ImageMagick-devel-6.2.8.0-4.el5_5.3.i386.rpm

rpmのインストール

# rpm -ivh ./*
準備中...                ########################################### [100%]
   1:ImageMagick            ########################################### [ 25%]
   2:ImageMagick-devel      ########################################### [ 50%]
   3:ImageMagick-c++        ########################################### [ 75%]
   4:ImageMagick-c++-devel  ########################################### [100%]

次のページからmsttcorefonts-2.0-1.noarch.rpmをダウンロード。
wgetだと404になるので、一度ローカルに落とそう)
http://www.mjmwired.net/resources/mjm-fedora-f7.html#ttf

rpm -ivh msttcorefonts-2.0-1.noarch.rpm
ln -s /usr/share/fonts/msttcorefonts /usr/share/fonts/default/TrueType
vi Gemfile
gem 'rmagick', '1.15.17', :require => 'RMagick'
bundle install
(略)
Installing rmagick (1.15.17) with native extensions
Your bundle is complete! It was installed into ./vendor/bundle

どうにかこうにか、RMagickのインストールに成功。