【Rails】一部のフィールドのみvalidを実行する

Posted filed under Ruby on Rails.

友達のブログで探してるって書いてたので、自分で使ってるソースを晒してみる。 # 指定したカラムのみでvalid?を実行 # # ActiveRecord#valid_columns?(:login, :password) # class ActiveRecord::Errors # 指定したカラムのエラーを削除 def delete(column) @errors.delete(column.to_s) end end module ActiveRecord::Validations # 指定したカラムのみをvalid? def valid_columns?(*columns) valid? cols = columns.flatten.collect(&:to_s) errors.delete_if do |column, error| !cols.include?(column) end errors.empty? end end * 変更 02/24 06:58*  eachの中でdeleteやめて、delete_ifを使う様にした。

札幌ビズカフェでRailsの話をします

Posted filed under Ruby on Rails.

札幌ビズカフェで、3/5 18:30からRailsの話をします。 特にサービスインに必要なサーバの話や、運用の話を中心に出来たらいいなと思っています。 最近、注目されてきている、Adobe AIRとの組み合わせについても、少し話す予定です。 http://www.bizcafe.jp/whatsnew/index.php?itemid=1143

【実は】マクドナルドの100円コーヒーはお代わり無料【有名なの?】

Posted filed under Ruby on Rails.

 店舗によってですが、mobilepointで無線LANが使えたり、コンセントまで使えちゃうので、よく仕事の気分転換に行くマクドナルドですが、今日、妻と一緒に行ったところ、驚愕の事実を知りました。  マクドナルドのコーヒーってお代わり自由なんですね。 どこにも書いてないけど。  最近、コーヒーおいしくなったし、電源も使えるし、無線もOK。すばらしすぎるマクドナルド。  今日、一緒に行ったマクドで「隣のレジでコーヒーのカップを持って、『お代わりください』って言っている人がいた」というので「次頼むときに聞いてきて」と言って聞いてきて貰いました。ありがとうw

[予告編 30分]AIRとBlazeDSとRubyでメッセンジャーを作る[129ページ]

Posted filed under Ruby on Rails.

| View | Upload your own 今日デブサミライブで話をしてきた資料を公開します。 Adobe AIRとBlazeDS、JRubyを合わせて企業内向けメッセンジャーを作ろうという話です。 時間が30分と短いのでざっくりとした内容ですが、BlazeDSとAIRの連携を中心に、JRubyからメッセージを送信するまでを解説しています。 この話は、まだ途中で、続きは3月に入ってからAdobe Developer Connectionで公開する予定です。 実装してほしい機能などありましたら、コメントください。よろしくお願いします。 PDFダウンロード

もうすぐだけど、デブサミで発表します

Posted filed under Publications, Ruby on Rails.

デブサミ2008のデブサミライブ 2/13 14:20-の枠で、BlazeDSをRubyから扱う話をします。 BlazeDS(Java), Ruby, AIR(ActionScript)と扱う言語だけは多いですが、マニアックな話ので、誰もこないんじゃないかと心配です。 内容的には、BlazeDS+AIR+Rubyを使って企業向けインスタンスメッセンジャーを作る話をします。 殆ど時間をPCに向かっているこの業界では、内線電話よりもメッセンジャーの方が便利な事も多々あると思います。 しかし、GTalkやMSNメッセンジャーはセキュリティの問題があり使えない、、、 そんな企業の為に、簡単に作れるメッセンジャーをご紹介します。 多分、同時に100人以上が接続しても大丈夫。はなず。クラスタリングもできるっぽいし。 そして、いまそのサンプルを間違って消してしまって、作り直しちゅう。。。。。 サンプルだから、svnに突っ込んでなかったんだよなぁ。

Railsでコントローラを作らずにerbだけ実行する方法

Posted filed under Ruby on Rails.

別にPHPの話題とは関係ないのですが、PHP見たいにHTMLにぺっとコードを貼って動かしたいなーというケースはRailsでアプリを組んでいて思う事が多々あります。 ヘルプページは静的なHTMLなんだけど、レイアウトはRails部分と共用したいなーとか、ヘッダ部分にログイン中のユーザ名だけは入れておきたいなーとか。 そこで、そんなときのため、http://example.com/helpにアクセスすると、RAILS_ROOT/erb/help.html.erbが実行されるような仕組みを考えてみました。めんどくさいのでプラグインにはしていません。 ルートファイルと、アプリケーションコントローラに下記のコードを追加してください。 config/routes.rbの最後の行に追加 map.connect ‘*path’, :controller => ‘application’, :action => ‘rescue_404′ if ::ActionController::Base.consider_all_requests_local app/controllers/application.rbの適当な所に追加 def rescue_404 absolute_root = File.join(File.expand_path(RAILS_ROOT),”) template = File.expand_path(File.join(‘erb’, *params[:path]), RAILS_ROOT) if template.index(absolute_root) == 0 template = File.join(template, ‘index’) if File.directory?(template) [‘.html.erb’, ‘.erb’, ‘.rhtml’].each do |ext| return render(:file => template+ext) if File.file?(template+ext) end end render :file => File.join(RAILS_ROOT, ‘public’, ‘404.html’)… Read more »

jpmobileのtrans sidをセッションのCookieStoreに対応させてみる

Posted filed under Ruby on Rails.

こっちが、ほんとの目的。地味に開発を続けているSticka.jpの携帯対応の為に必要なので。 AIR版とWeb版を同時にリリースするつもりだったのに、AIRの日本語は相変わらずダメダメなので、とりあえずWeb版ばかり開発が進んでます。 すでに十分使える様になったので、前に登録していただいた人を中心に近々ベータテストを開始します。 このコードはうまく動きません。対応はあきらめました。 (追記 2008/02/03) さて、このStickaはRails 2.0で作っています。セッションはCookieStore。どうせuser_idしか保存しないしね。 でも、そうするとクッキーを持たない携帯では使えない。それじゃ困る。 という事で書いてみました。jpmobileのtrans sidを使ってCookieStoreをパラメータに保存。 セキュリティ的にかなり微妙なので、使う人は気をつけてください。 とくにリファラーは一発です。 i-modeのブックマークのURLは256文字までらしいので、別に対策が必要です。 jpmobile/lib/jpmobile/trans_sid.rb # 〜〜 省略 〜〜 class CGI::Session::CookieStore #:nodoc: # ↓追加 def marshaled_data #:nodoc: if defined?(@data) && !@data.blank? updated = marshal(@data) raise CookieOverflow if updated.size > MAX return updated end nil end end # ↑追加 module Jpmobile::TransSid #:nodoc: # 〜〜 省略 〜〜… Read more »

jpmobileのtrans_sidがRails2.0で動かなかったのでパッチを作ってみた

Posted filed under Ruby on Rails.

Cookieが使えないDoCoMoなどの端末で、uriにセッションキーを追加するtrans_sidが、Rails 2.0系で動かないっていう話があったので、気分転換に手を動かしてみました。 http://dev.rubyonrails.org/browser/tags/rel_2-0-2/actionpack/lib/action_controller/cgi_ext/session.rb Railsのセッションは、Ruby標準のCGI::Sessionを使っています。ここでSessionを生成する時にCGIのオブジェクトから、クッキーやパラメータを見てセッションを生成してます。 そこで、このセッション生成のときを調べてみると、CGI#paramsが空でパラメータが渡っていません。 http://dev.rubyonrails.org/browser/tags/rel_2-0-2/actionpack/lib/action_controller/cgi_ext/query_extension.rb CGIの生成を追っていると、そもそも生成時にCGI#paramsを{}で上書きしています。 これは、CSRF対策のようです。これを上書きするのもちょっとなんな気がするので、セッション生成時にパラメータを再構築する様にしてみます。 jpmobile/lib/jpmobile/trans_sid.rb に下記のパッチを追加してください。 class ::CGI #:nodoc: class Session #:nodoc: alias_method :initialize_without_uri_session_key, :initialize def initialize(cgi, options = {}) cgi.params[options[‘session_key’]] ||= ENV[‘RAW_POST_DATA’] ? CGI.parse(ENV[‘RAW_POST_DATA’])[options[‘session_key’]] : CGI.parse(cgi.query_string)[options[‘session_key’]] if @cgi.cookies[options[‘session_key’]].empty? initialize_without_uri_session_key(cgi, options) end end end このままだと、jpmobileをインストールするだけで、セッションキーをパラメータで受け取る様になってしまいます。 本当は最低でもtrans_sidが起動された場合にのみ、このパッチが走る様にしないとな。 携帯用にするなら、携帯からのアクセスの場合のみURIパラメータでセッションキーを受け取る様にしたいなぁ。 このパッチは、作者のShidara君に送ってあるので、数日中に取り込まれると思います。 続いて、CookieStoreをパラメータに埋め込む様にしたいなぁ。

Rails 2.0リリース! でもActiveModelが….

Posted filed under Ruby on Rails.

http://dev.rubyonrails.org/browser/tags/rel_2-0-0 Rails2.0でました! rubyforgeではパッケージが公開されているので、数時間でgemでもインストールできるようになるでしょう。 ActiveModelを楽しみにしてたんだけど、やっぱり空っぽ・・・。 http://dev.rubyonrails.org/browser/tags/rel_2-0-0/activemodel/lib/active_model これが正式版でいいのか? つうかこんだけ広範囲に影響するものをRC1で入れるあたりが怖いなぁ。