2011年2月27日日曜日

Rails3でTypeError (expected Hash (got Array) for param

はまったよ...

[Railsのキホン]リクエストパラメータ、こちらの記事がとても参考になりました。

原因

原因はinput系要素のnameの配列でした。

user[][name]
user[][favourite]
user[address] # <- これが原因!!

解決後

user[][name]
user[][favourite]
user[]address] # -> user[][address]に変更

ひあー...

ちょっと入り組んでるフォームを作ってたので、いろいろと出現条件が違うものを。原因が出る条件は特定できたんですが、その後が... たったこれだけの間違いに2時間くらいパーにしました(T_T) PHPとは扱いが違うのは分かってたんですが、いい勉強になりました。

2011年2月25日金曜日

Debian Lenny Ruby1.9.2でRMagick 2.13.1を入れる

情報源

How do I install ImageMagick 6.5.6 on Debian Lenny?

Debian LennyのRMagickがgem install時に古くて怒られる

しかもpngのリサイズ時にバグがあるんだそうです... じゃあ新しいのを入れてやる!ってことで頑張ってみました

インストール手順

vim /etc/apt/sources.list
deb-src http://http.us.debian.org/debian squeeze main contrib non-free

apt-get update
apt-get build-dep imagemagick
apt-get source imagemagick
cd imagemagick-6.6.0.4
debian/rules binary
cd ..
dpkg -i *.deb

gem install rmagick

2011年2月23日水曜日

オブジェクト指向 デザインパターン DDD

エリック・エヴァンスのドメイン駆動設計

読んでみたいが、これ高い!! 高い上にきっと内容も難しい。難しいというか、オブジェクト指向ができるかつデザインパターンは習得してるレベルでないと、きっと本の中になんの躊躇もなく出てくると思う。以前に、DDDのPDFをInfoQあたりが無料で公開していたので落としたことがあって、それを昨日ちょっとだけ見てみたけど、ファサード、ファクトリが図に出て来ていた。今読んでもきっと消化不良を起こすだろうから、もう少しオブジェクト指向プログラマーとしてのレベルが上がったら読んでみたいと思う。

2011年2月17日木曜日

JavaScriptパターンを読んでみたいなぁ

JavaScriptパターン ―優れたアプリケーションのための作法

やっぱり発売と同時に在庫が切れてますね。さすが。

この本は原書の評価が高いのと、目次を見れば分かるけど、コーディングパターン、デザインパターン、アンチパターンを扱ってるのが伺える。この3つのパターンをざっくり説明すると、コーディングパターンはこういう書き方をしましょう、アンチパターンはこういうやり方or書き方はやめましょう(そのかわりの解決案が提示されると素晴らしい)、デザインパターンはGoFとかの...(説明する必要はないですね!)。JavaScriptを普段からがっつりやってるわけじゃないし、自力でライブラリ作ったりはしてないけど、やっぱりモダンな書き方というか、よりスマートでバランスのいい書き方というのは追い求めたいです。そういう書き方を知ってることで他のライブラリを読む時の助けにもなるし、パターンというのは本来そういうもので、いわゆる言語の中の共通言語的な役目もある。共通認識をほとんどずれなく素早く得るためのもの、という感じ。ストラテジパターンで作っといて!といって通じれば早いし、ストラテジパターンか!とパターンに当てはめて理解できれば早い。デザインパターンに限らず、グローバルを汚染しない書き方や、べからず集もまとまってそうだから読みたいなー。読んだら書評を書きます。献本大歓迎です!笑

RailsでセッションIDを取得する方法

request.session_options[:id]

session[:session_id]とかsession.session_idじゃなくなったようです。

2011年2月13日日曜日

TextMateの補完(esc)に別のショートカットを割り当てる方法

ESCは遠いのでControl + .にしたい

環境設定 > キーボード > キーボードショートカット > アプリケーション
ここで+を押して追加する。アプリケーションにTextMateを選んで、名前をNext Completeとして、好きなキーを割り当てましょう。

2011年2月12日土曜日

Railsのメールでヘルパーを使うにはhelperを使う

no methodエラーだと... 同じviews内にありながら!!

理由が分からないけど、helperで読み込んであげればOK

class OrderMailer < ActionMailer::Base
  helper :OrderHelper
  ...
end

2011年2月10日木曜日

Rails3でURLエスケープ

uを使う

意外と検索しても出てこないので、CGIとか使わなくてもいけますよ!ということで。

<a href="/<%= u '日本語URLとか?' %>">日本語URLとか?</a>

2011年2月5日土曜日

Rails3でアソシエーションを組んだモデルのフォームの書き方 fields_for

one-to-one has_oneな関係の例

今回はよくあるユーザとユーザの詳細データをテーブル上切り分けた例でやってみます。

class User < ActiveRecord::Base
  has_one :profile
  accepts_nested_attributes_for :profile, :allow_destroy => true
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

# app/views/user/_form.html.erb
<%= form_for :user do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name%>
  <%= f.fields_for :profile do |pf| %>
    <= pf.label :favourite_music %>
    <= pf.text_field :favourite_music %>
  <% end %>
<% end %>

fields_forを使えばOK!

これで動くのだから便利!user_addressでやってみたところどうもうまくいかなかった。もしかしたら、アンダーバーを入れた場合にバグがあるかもしれない。また今度試してみよう...

2011年2月3日木曜日

Rails3でurlのidの部分にid以外のものを指定する to_paramメソッド

/:controller/:show/:idだとSEO上ねぇ...とかidだとまずいんだよね...とか

SEOや視認性の高さを優先したい場合はidじゃなくて、別なフィールドやidと何かを混ぜたものにしたくなると思います。そういう時はモデルのto_paramメソッドをオーバーライドすればOK!

class Cart < ActiveRecord::Base
  def to_param
    hashed_id.parameterize
  end
end

あとはroutes.rbを修正するなどしましょう。