Rails

携帯向けアプリでQRコードを生成する

RailsでのQRコードの生成方法 これは主に2つの方法がある。1つはプラグインを使用する方法、もう一つはGDを使ったライブラリを使用する方法だ。 1.プラグインを使用する こちらはプラグインを使用する方法である。導入も簡単で、直ぐに使えるだろう。し…

flash.nowのテスト

railsのテストで以下のように書きたいことがある。 assert_equal "test", flash.now[:notice] しかし、実際はこれは無理である。詳しくは以下のページへ。 http://techno.hippy.jp/rorwiki/?HowToTestFlash.Now 対処法としては、以下のようにする。 assert @…

transitテスト

すべてのキャリアに、URLにセッションIDが付与されるかのテスト。 特に、Cookie対応携帯の場合は:alwaysオプションがないと負荷されないので、そのミス を防止するためのテスト。 実際、:alwaysにせず、SoftBankの携帯で、Cookieを無効にすると、セッショ…

Moduleをincludeした先のコンテキストでメソッドを実行したい

def validate_length(def_attr_length) attr_symbol = get_attr_symbol_from_attr_length(def_attr_length) if eval(def_attr_length) < (send(attr_symbol) || "").jlength errors.add(attr_symbol,"が文字数制限を超えています。") return false end retur…

RailsAword2007

最近シンプルなアプリが流行っているね。 http://rails.drecom.jp/award2007 シンプルは最高!時間がかからないからだ。

プルダウンリスト(select)のデフォルト

options_for_selectで設定するのね。 <%= select_tag :kind, options_for_select(User::USER_KINDS_FOR_SEARCH,params[:kind].to_i)

・テストで、@valid_dataを使っても、mergeする際にシンボルが使える

parameters = assigns(:informal_decision).attributes.symbolize_keys.merge(options) def test_update_profile_success_ident simurate_informal_decision_login_2 @request.user_agent = "DoCoMo/2.0 D902i(c100;TB;W23H16;ser999999999999999;icc0000000…

validates_length_ofと日本語

.lengthでなく、splitでカウントしているので、きちんと文字コードを指定していれば文字数として認識される。 しかし、Kuなどをしていない場合は、3倍になったりするのでご注意。(UTF-8は漢字(仮名含む)の表現に3バイトを要する。そのため日本語の文章は…

has_manyでの[]=

has_many系の関連では、 しかし、student.questionnaires[0] = questionnaireとなった場合はsaveするまでは関連付けはされない。

携帯サイトの厄介な文字化け with JpMobile

あるサイトで、リンクをクリックすると、そのアンカーテキストで検索をかけ、その結果を表示 するプログラムを作成した。そしたら、結果の部分が文字化けする。しかも、getで投げた、 アンカーのテキストが。 それは、なぜか2回UTF8変換が起こっている。 …

order句は、その項目がnilでも検索してしまう

IS NOT NULLが必要

空入力防止

validates_presence_ofだと、" "を許す。その代用 def filled?(str) if str return !str.gsub(/(\s| )/,"").empty? else return false end end

IPブロック

■テストの書き方 def test_ip_block @request.remote_addr = "123.123.123.123" get :login assert_response :success assert_template "#{RAILS_ROOT}/public/404.html" end ■メソッドの書き方 def valid_ip? if request.remote_ip == MY_SERVER_IP || requ…

ActionMailerについて

http://d.hatena.ne.jp/moriyoshi/searchdiary?word=*%5BActionMailer%5D

ログの定期的な消去

http://d.hatena.ne.jp/enkimi/20051230

SSLテスト

def test_ssl_requirement ssl_requirement_actions = [:signup,:password_forgot,:questionnaire,:change,:update_personal_data,:about_easy_login,:login] login_requirement_actions = [:change,:update_personal_data,:about_easy_login] ssl_requireme…

ルーティングとテスト

ルーティングしていると、テストでそこに対してgetとかをすると、ルーティングが機能してしまう。 例えば、 map.connect '',:controller => "user/account",:action => "login" となっているとして、 get :login assert_match %r<^https://test.host/user/ac…

メモ:フィルタ用メソッドの注意

filterにreturn falseをしかるべくつけよ特に、リダイレクトを含んだり、異常を検知するもの。

Webrick でSSLを使おう

■link_toを使う <%= link_to "セキュアページへ",{:action => "questionnaire",:only_path => false, :protocol => 'https://'},:accesskey=>"2" %> ■Webrick on SSL ローカルでSSLのテストをしてみる。 簡単に言うと、普段の場合と同じように、HTTPをポート…

submit_tagでのconfirm

<%= submit_tag "決定",:onclick => "return #{confirm_javascript_function("本当によろしいですか")}" %>

テスト(remote_ipとremote_addr)

Reqest#remote_ipは、テスト環境では、Session#remote_addrとなる。

ルーティングの際の注意

■ルーティングしたのに表示されない!という時のために 1.public.htmlが削除されているか 2.キャッシュが働いていないか

JpMobileのmobile_filterを使ったテスト

携帯をシミュレートしないといけないので、valid_dataをSJISにする。 それは、携帯はデータを送信するときに既にSJISだから。 ここをUTFで書くと、携帯がUTFで送ってmobile_filterでSJISになることになる。 テストはローカルで書いているが、携帯をシミュレ…

ドコモのutn付きボタンの生成法

きちんと()なども書かないとエラーするとのこと。 form_tag ({:action => "***"}, {:utn => "utn"})

T-Mailと携帯メールアドレスの問題

T-Mailでは、..などのメアドを許容しない。これについて最新のT-Mailはある程度対応している。 この対応で、@前の1つの.、と、..は許容されるようになった。 http://i.loveruby.net/svn/public/tmail/trunk また、こちらには、どのアドレスならT-MailがOK…

テストの時に気をつけること

例えば、本来ユーザーIDとるのを間違えて企業IDとっている場合、テストだと大抵 ID=1のものをどっちとも使うので通ってしまう

GetTextのテスト問題

http://www.yotabanana.com/lab/20070415.html

モデルでfind、ページング

findの処理をモデル側に任せて、かつページングする方法 def show_articles return unless @user = check_valid_user @articles = @user.get_articles #added for pagenate count = @articles.size @pages = Paginator.new(self, count, LIMIT_PER_PAGE, par…

代入と判定

■結構使えるirb(main):001:0> (a = "b") == false => false irb(main):002:0> a => "b" irb(main):003:0> (a = false) == false => true irb(main):004:0> a => false irb(main):005:0> (a = "b") == false && (a = "c") == false => false irb(main):007:0>…

堅牢なテスト

■バグがあったときの対処方法 1.まず、そのバグを再現するテストを書く。そして、落とす 2.そして、それが通るまで修正をかける。 すると、同じバグは2度と起こらない こうして、堅牢なテストを作っていく