トップ «前の日記(2005-04-23 (Sat)) 最新 次の日記(2005-04-26 (Tue))» 編集   RSS 1.0 FEED  

Journal InTime


2005-04-24 (Sun) [長年日記]

_ [Rails] action以外のメソッドをpublicにしてはいけない

何となく、以下のaction_methodsの実装を見て気になっていたのだが、 Railsのコントローラのメソッドでpublicなものは、すべてaction として扱われてしまう(=外部から呼び出し可能になる)ようだ。

def action_methods
  @action_methods ||= (self.class.public_instance_methods - self.class.hidden_actions)
end

これって周知されてる?

気持ちはわからなくもないけど、メソッドの可視性をそのまま使ってしまうのは あまりよくないと思う。

def show
  ...
end
action_method :show

とかの方がよかったんじゃないかなあ。

まあ、でも、Railsっぽいなという気はする。 Railsを使う時は、Railsの慣習をよく知っておかないと危険かもしれない。 適当にやってても動いてしまうだけに。

自分は、

def action_methods
  return ["list", "show", ...]
end

とでもしとくかな。 public_instance_methodsのコスト *1 を免れるし。

*1  Railsでpublic_instance_methodsが遅いのは、mix-inを多用しているせいかもしれない。

_ [Rails] image_tagと絶対URI

image_tag(というかcompute_public_auth)にhttp://hostname/path/to/fileのような 絶対URIを渡しても、相対パスとして扱われてしまうようだ。

そういうもの?

_ [その他] 松江市長・市議選

一応投票。

しかし、旧松江市の選挙区は定数34に候補者36人で、どうも盛り上がりに書ける。 個人的には、中島始候補の広報にウケた*1。 4年後は、全市で一区になるようだ。

結果は、一勝一敗。

*1  入れてないけど。

本日のツッコミ(全6件) [ツッコミを入れる]
_ たかはし (2005-04-25 (Mon) 14:04)

コントローラの可視性はサービスの可視性と一致するはず、という前提に立てば、action_methodを別途設けてしまうのはDRYじゃない:-) ということかと。<br>本家のMLでも以前話題になってたはずです。

_ shugo (2005-04-25 (Mon) 14:29)

しかし、privateなんて使わねーよというRubyユーザも多いわけで、<br>「 コントローラの可視性はサービスの可視性と一致するはず」という方針ならもっとチュートリアルとかでもがんがん<br>アピールするべきなんじゃないですかねえ。<br><br>言語レベルのメソッドの可視性というのはあくまでもプログラミング上の利便性のためにあるものなので、<br>「コントローラの可視性はサービスの可視性と一致するはず」<br>という前提条件を説明なしにユーザに強いるのは、少々乱暴な気もします。

_ ささだ (2005-04-25 (Mon) 16:56)

on_hoge で hoge というサービス,でいーと思うんだけどなぁ.規約万歳なら.

_ shugo (2005-04-25 (Mon) 16:57)

それだとだいぶ問題は少ないですねえ。<br><br>でもまつもとさんはon_hogeとか嫌いって言ってたような。<br>いや、do_hogeか。

_ たかはし (2005-04-25 (Mon) 19:32)

DHHの発言を見つけました。↓これですね。<br>http://one.textdrive.com/pipermail/rails/2005-February/003093.html<br><br>まー、DHHって「少々乱暴」ギミなところはありそうです。あと、ドキュメントも数のわりに整理されてないかもしれません。HowToが多いのはそれはそれで便利なんですけど。

_ shugo (2005-04-26 (Tue) 09:39)

そうですねえ。<br><br>SQL/Javascript injectionやらの話も含めた`Secure Programming HOWTO'みたいなのが欲しいなあ。