LoginSignup
16
14

More than 5 years have passed since last update.

弱小PHPerがRailsに浮気して困惑したことn選

Last updated at Posted at 2016-01-29

弱小PHPer、RoRを触る

PHPをずっと触ってきた弱小プログラマですが、無謀にも今月からRoRで開発する会社に転職してしまいました。
そろそろ1ヶ月が経つのですが、最初から慣れないことだらけでつまずきや戸惑いの連続でした。
この記事ではそんな中での大小さまざまな困った点を晒していこうと思います。似たような境遇の方々の助けになれば幸いです。

出くわした問題たち

あれ、returnは?

def set_data(id)
  @data = Data.find(id)
end

熟練のRubyistたちには当たり前のことなのだと思いますが、
上の例のようにメソッド内にreturnの記述が全然見当たらないことに最初はとても戸惑いました。
rubyでもreturnを書こうと思えば書けるみたいなんですが、自分が見ている範囲では今の所あまり見ないです。
どうもrubyは最後に評価された値が自動的に返却されるようで、こういう書き方ができるみたいですね。
最近は少しずつ慣れてきて、このメリットをようやく感じられるようになってきました。
確かに記述を簡素にできるのはいいですね!

見慣れないパーセント

keys = %w(a b c d)

入社から数日、こんなコードを発見した時には途方に暮れてしまいました。なんだこれは、と。
これは%記法というもので、上のwの例は要素が文字列の配列を生成する表現だそうなのですが、
クオート文字列やその他用途に合わせて色々なことができるようで、調べてみると色々な種類があることがわかります。
調べればなんてことはないんですが、最初は「ruby %w」とかで検索してもめぼしい情報には当たらず、なかなかの衝撃度でした。

arel_table

複雑なSQLをコードで組む時に利用するRailsのAPIなのですが、
現在進行形で絶賛消耗中です。これが一番ややこしいかもしれません。

Hashから値が取れない!

私が一番ハマったポイントです。このために記事を書こうと思ったと言ってもk(ry
リクエストパラメータから受け取ったkeyでハッシュの値を取得しようとする下記のようなコードがあったとします。

params[:p] # => "1"

key = 2
hash = { 1 => 'foo', 2 => 'bar' }

logger.debug('==============')
logger.debug(hash[params[:p]])
logger.debug(hash[2])
logger.debug('==============')

実行するとどうなるかと言うと、、、

==============

bar
==============

はい、パラメータから取得の方は見事に取れてません。
この問題(?)で何よりも困ったのはエラーも何も出ず、ただただ値が取れないだけ、という点になるのですが、
実際出くわした時のコードはもっと複雑で、どこで間違ったのが全然わからず3時間くらい浪費しました(泣

ではどうすればよかったのかと言うと

logger.debug(hash[params[:p].to_i])

そうです。パラメータから受け取った値は文字列になっているので数値に変換してあげればよかったわけです。

==============
foo
bar
==============

これでめでたく値が取れました^^
PHPではこんなことなかったので、型には気をつけなければいけないですね(汗

最後に

とりあえず覚えてる範囲で書き出してみましたが、他にもいっぱいあった気がします(汗
PHPとRubyは似てるだろうと思い込んで飛び込んでみましたが、実はそうでもないんじゃないかな、と思い始めてます。
言語仕様もさることながら、そもそも根底の考え方というか、
文化圏、経済圏、民族的出自みたいなものを異にするんじゃないかなぁ、というのが今の所の印象です。
(また経験を積んでいけば捉え方も変わるかもしれません)

とはいえ私のRuby&Rails歴はまだ1ヶ月に満たない状態で、まだまだこれからもいろんなポイントでハマっていくと思いますので
何かあれば引き続き更新していきたいと思います。

それでは皆さま良きエンジニアライフを!

16
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14