Rails

find_or_create

ほしいよね。なんでないんだろ? class ActiveRecord::Base class <<self def find_or_create(attrs) array = attrs.to_a conditions = [ array.map{|pair| "#{pair.first} = ?"}.join(' AND '), *array.map{|pair| pair.last} ] find(:first, :conditions => conditions) || create(attrs) end end end config/environment.rbの最後とかにとりあえず。</self>

一部のマイグレーションだけ実行する

開発DBにゴミが増えてきたので rake db:resetしたらマイグレーションで投入してたデフォルトデータも綺麗に消え去りました。まぁ当然だけど。で、どうしようかなぁと思ってとりあえず以下のように試したらあっさり行けたっぽい。あ、これでいいのか。 $ ./sc…

犬牧場始めました。

読売新聞社によると「犬情報を登録する「犬牧場」なら何の問題もなかったんですが」とのことなので、犬牧場始めます。 http://5.latest.itrain.appspot.com/ いや、せっかくの生きた JRails on GAE/J サンプルを消すのがもったいなかったもんで。

女の子農園終了しました。

元ネタの男の子牧場が無事に1週突き抜けを果たしてしまい、存在意義を失ったので女の子農園は終了します。短い間でしたがありがとうございました。

女の子農園はじめました。

http://5.latest.itrain.appspot.com/ 久しぶりにくらくら来るサービスを目の当たりにして居ても立ってもいられない気持ちになったので作ってみた。叱られたら躊躇なく消す。ちなみに中身はJRails on GAE。おかげで起動が遅くてエラーになることもあるけど、…

たぶん一番かんたんなRails on GAE/J

rails APPNAME -m http://gist.github.com/103256.txtいろいろまとめてプラギン化した上で、アプリケーションテンプレートもご用意致しました。瀧内さんとこ参考にRailsをjarにまとめてあるのでファイル数制限も余裕で回避。あれこれ結構がんばった。GAE/Jの…

JRuby on Rails on Google App Engine勝手訳

Google App EngineのJava版が出ました。まぁJavaは比較的どうでもいいんですが、嬉しいことにこの上ではJRubyが動くようです。海外の先駆者ががんばってブログを書いてくれたので、いつものように勝手訳してみます。http://olabini.com/blog/2009/04/jruby-o…

複数のタイプのモデルを更新するフォーム

form_for ってモデルを一つしか指定できないんだけど、複数のモデルの情報を更新したいときってどうするんだろ。fields_for ってないのかな、なかったら作ろうかな、とか思ってソース見てたら、何のひねりもなく名前まで想像通りのがあった。 # actionpack-2…

true_readonlyable

既存のmemberテーブルをRailsアプリから読むんだけど、共有の大事な大事なテーブルなので間違っても更新したくなかった訳です。で、そういえば acts_as_readonlyable なんて素っ頓狂な名前のプラグインがあったなーと思い出しまして、ちょっと調べたんだけど…

iKnow3Gが第2位に!

iPhone用iKnowアイテム復習サービスのiKnow3G!が「iKnow! API KICK OFF!」で第2位に選ばれました。発表前のiKnow Developer ConferenceのLTですごそうな作品がたくさん紹介された中、小綺麗にまとまっているだけで技術的には特別見るところのないこのサービ…

Arrayの序数アクセサをGit登録&ジンバブエ対応

先日の序数アクセサはDHHに「中途半端」などと暴言を吐きながら、結局利用可能な最大インデックスは一千兆と、ジンバブエのインフレにも対応できていない中途半端なものだった。そこで今回ライブラリをGitに登録するにあたって対応数を大幅に拡大した。今回…

Array#one_hundred_thirty_two_thousand_six_hundred_and_forty_eighth とかできるよ

Rails2.2でなんとArrayオブジェクトのアクセサとして#second 〜 #tenthなんてのができちゃった。だいたい分かると思うけど ary.second は ary[1] と同じで、ary.tenth はary[9] と同じ。正直これにはがっかりした。DHHにしては中途半端と言うほかない。なん…

iKnow Web App for iPhoneできました

http://apps.technohippy.net/iknow3g iKnow APIコンテスト提出作品第二弾。学習結果を送り込むようなAPIはないので復習専用だけども。あと、待ってればCeregoからiPhoneアプリ版が出そうな気がして仕方ないけれど。トップはこんな感じ。iKnowの学習履歴と、…

CAPTCHA on iKnow!のデモサイト立ち上げた

http://apps.technohippy.net/captcha_on_iknow_demosCAPTCHA on iKnow!は一応iKnow!のコンテスト「iKnow! API KICK OFF!」の応募作ってことにしてるんだけど、どうも動いているサービスがないと評価対象にならないっぽい。しょうがないのでとりあえずデモサ…

CAPTCHA on iKnow!の使い方

http://code.google.com/p/captcha-on-iknow/まだいろいろ作り込みが足りないのでgemにしたりはしないけど、かといって誰にも触ってももらえないのも寂しいので使い方を書いてみる。上にも書いたけど、音声キャプチャはわりといい感じだと思うよ。せっかくだ…

iKnow! APIを使ったRails用CAPTCHAプラグインを作ってみた

http://code.google.com/p/captcha-on-iknow/とりあえずiKnowのフォーラムに一番乗りするという目標は果たした。眠いのであとで書く・・・。ということで、iKnow! API使ってCAPTCHA作ってみた。ちゃんとAccessibilityにも考慮して音声キャプチャ付き。という…

去年クックパッドさんでやったLTの動画が公開されてる模様

http://cookpad.typepad.jp/lt/2008/09/physic-sketch-8.html 半年以上公開されなかったので、もうお蔵入りかと思ってました(^_^; 例によってブツは絶賛放置中だけどプレゼンはわりとおもしろかったんじゃないかと思う。どうでしょ?http://cookpad.typepad.…

レイアウトファイル名

レイアウトファイル名は拡張子以外の部分で存在確認するようで、あるレイアウトを一時的に共通のに切り替えようと思って app/views/layouts/events.html.erb.old とかやったら、app/views/layouts/events の存在を確認したあと、適切な拡張子を持つファイル…

jpmobileプラグインとSoftbank

バージョンによるかもしれないけど、jpmobileプラグインってソフトバンクの時だけ文字コードの変換をしないようになってんのね。 class Jpmobile::Filter::Sjis # 前略 # to_internalを適用するべきかどうかを返す。 def apply_incoming?(controller) # Voda…

クックパッドLTに参加してきた

今回で3回目になるクックパッドさんでのLT(というかRailsサービス紹介?)に参加してきました。 ベトナム料理がむちゃうまかったです。ごちそうさまでした。 ・・・ で、終わりたくなるくらい料理が美味しかったですが、それはおいといて発表の話。作品で面白…

FlashのデータをRails経由でDBに書き込んだり読み出したり

できてしまえば結構簡単だけど、この方式に至るまでが長かった・・・ 使うもの rubyamf (Rails側) ssr (Flex側) Rails側 例としてFlashControllerでデータを受けて、FlashDataモデルのdata属性にデータを保存することにします rubyamfプラグインをインストー…

キャッシュ回りの設定

environment/development.rb とか見てるとキャッシュ周りの設定がいくつかあってちょっと混乱したのでメモ config.cache_classes アプリケーションのソースを変更したときにリロードするかどうか config.action_controller.perform_caching ページキャッシュ…

find_by_sql_with_deleted

acts_as_paranoidはレコードを論理削除してくれるRailsプラグインで、findの条件節に自動的にdeleted_at IS NULLとか付けてくれるわけなんだけど、どうもfind_by_sqlはその範囲外らしい。 by_sqlって付けてるんだからそのSQLをそのまま実行したいという気持…

rake todo:list

恥ずかしい修正漏れをしたので作りました。 なぜかrak必須。 namespace :todo do desc 'show todo list' task :list do ['app', 'lib', 'config'].each{|path| rak_todo path} end end def rak_todo(path) fullpath = "#{File.dirname(__FILE__)}/../../#{pa…

Railsで色選択ダイアログを使う

いくつか試してこれが一番良さそうだったのでメモ。http://www.knallgrau.at/code/colorpicker以下、Railsでの使い方。上のをダウンロードして次のように配置 public + images + blank.gif + hline.png + hue.png + picker.png + pickerbg.png + select.gif …

KaoChartのLT動画

12月頭くらいにクックパッドさんでRailsを使ったサービスに関するLTがあって、私も以前作ったサービスKaoChartについてしゃべったんですが、そのときの動画が公開されたようです。 http://cookpad.typepad.jp/lt/2008/02/kaochart-758.html なんか私だけしゃ…

ActiveRecordの抽象サブクラスを作る

普通にActiveRecordのサブクラスを作るとSTIと見なされて、サブクラスはテーブルと一対一対応にはなりません。親クラスだけがテーブルと対応してて、サブクラスのインスタンスには親クラステーブルから必要なのだけとってきて設定される感じ。 これはこれで…

サブディレクトリ内のコントローラに同一ディレクトリ内のapplication.rhtmlを適用

admin/top_controller.rbにはviews/layouts/admin/application.rhtmlを自動的に適用して欲しかったので、とりあえず次のようにしてみた。app/controller/application.rb class ApplicationController < ActionController::Base class <

annotate_modelsをちょっと改造

annotate_model便利なんだけど、変更されてないテーブルのモデルとかフィクスチャとかのヘッダも書き換えるので、うっかり実行するとものすごい勢いで他の人の変更と衝突して辛い。ので、無理やり改造。vendor/plugins/annotate_models/lib/annotate_models.…

プラグインのソースURLって

~/.rails-plugin-sourcesにあるんすね。 増やしすぎてプラグインが見つからないときの動作がむちゃくちゃ重くなったのでごっそり消した。