テーブルから「最後のレコード」を取得する
ActiveRecordで「first」があるのは知ってたけど「last」があるのは知らなかった。
「モデル名.first :order => 'id DESC'」みたいに書いてた。
「モデル名.last」でいけるっぽい。
こう書くだけで動けばいいのに!と試してみると、大抵動く。やはりRailsはすごいです。
View以外の場所でヘルパーをつかう方法
ActionController::Helpersのhelpers()を使います。
# ruby script/console >> ApplicationController.helpers.simple_format "aaa" => "<p>aaa</p>"
という感じ。
Rails2系でメールの日本語化
運営中のサービスでユーザーさんから「メールのタイトルが文字化けしてるヨ!」という連絡がありました。
そういえばメールの文字化け対策は何もしてないので、Outlookとかでは文字化けするだろうなー。
ということで対策してみました。
2時間くらいかかるかと思いきや、ActionMailerJaのおかげさまで、ものの数分で対策完了。
いやー、すごい!ありがたい!
ActionMailerJa
http://github.com/kusakari/actionmailer_ja
Rails.rootなディレクトリから下記のコマンドを打つだけでした。
ruby script/plugin install git://github.com/kusakari/actionmailer_ja.git
gitが入ってない場合はgithubのページからダウンロードしてくるといいかと。
Twitterのつぶやきフォームのように入力文字数を動的にカウントする
今、Twitterライクなつぶやきサービスを作っています。
フォームのところでTwitterみたいに文字数のカウンターをつけたい、
ということでズバリなPluginを教えてもらいました。
jQuery plugin: Simplest Twitter-like dynamic character count for textareas and input fields
http://cssglobe.com/post/7161/jquery-plugin-simplest-twitterlike-dynamic-character-count-for-textareas
(0)ダウンロード
上記のURLにアクセスして、メイン画像の下の「Download plugin」をクリック。
zipを解凍して jquery.js と charCount.js をブラウザがアクセスできる場所に置きます。
(1)HTML
jsをインクルードします。
HTMLにカウンター用のタグを書きます。
<span class="counter">
(2)カウンター起動のスクリプトを書く
<script type="text/javascript"> //
(3)CSSの編集
form .counter{ font-size:20px; font-weight:bold; color:#ccc; } form .warning{color:#600;} form .exceeded{color:#e00;}
細かく設定することもできるみたいですが、以上の手順でそれなりに動きます。
Thank you Mr. Alen!
http://twitter.com/cssglobe
MobilePictogramConverterをiPhoneに対応させてみる。
CakePHPで携帯サイトを作っています。
このサイトをiPhoneにも対応させたのですが、携帯で入力した絵文字がiPhoneで表示されない。。。
キャリア間の絵文字変換にはMobilePictogramConverterを使わせてもらっていますが、
これをiPhoneに対応させてみました。
MobilePictogramConverterの使い方について
編集対象は「MobilePictogramConverter/Carrier/common.php」です。
ファイル先頭の定数定義に以下を追加します。
(変換先キャリアにiPhoneを追加。)
define('MPC_TO_SOFTBANK', 'SOFTBANK'); + define('MPC_TO_IPHONE', 'IPHONE'); /* 変換後の絵文字体系 */
UserAgentからキャリアを割り出す正規表現にiPhoneを追加。
var $mobile_user_agent = array( 'DoCoMo' => '/^DoCoMo\/\d\.\d[ \/]/', + 'iPhone' => '/iPhone/', 'SoftBank' => '/^(?:(?:SoftBank|Vodafone|J-PHONE)\/\d\.\d|MOT-)/',
自動変換用のメソッドにiPhone用の設定を追加
function autoConvert($toCharset = null) { $useragent = $_SERVER['HTTP_USER_AGENT']; if (preg_match($this->getRegexp('DoCoMo'), $useragent)) { $to = MPC_TO_FOMA; $option = MPC_TO_OPTION_RAW; + } elseif (preg_match($this->getRegexp('iPhone'), $useragent)) { + $to = MPC_TO_IPHONE; + $option = MPC_TO_OPTION_RAW;
変換テーブルを指定するコードのiPhone対応
function encoder($data) { $buf = ''; $to = $this->getTo(); + $c = ($to == MPC_TO_EZWEB) ? 'e' : (($to == MPC_TO_SOFTBANK || $to == MPC_TO_IPHONE) ? 's' : 'i');
function s_options_encode($dec) { switch($this->getOption()) { case MPC_TO_OPTION_RAW: list($hex1, $hex2) = sscanf(dechex($dec), '%02s%02s'); (中略) $char3 = $dec2 + $num; $buf = pack('C*', 0xEE, $char2, $char3); + if($this->getTo() == MPC_TO_IPHONE){ + $buf = bin2hex(mb_convert_encoding($buf, 'unicode', 'UTF-8')); + $buf = "{$buf};"; + break; + } if ($this->getFromCharset() === 'SJIS') {...
※ MobilePictogramConverterの本家って現在はリンク切れしてますね。。。
いいモジュールなんで、メンテがとまってしまって残念です。
でもまあ、絵文字変換モジュールのメンテって、細かい問題がいっぱいあって大変なんでしょうねー。
restful-authenticationの自動ログインの期限を延長する方法
ログインフォームで「次回から入力を省略する」にチェックするとログインしっぱなしになる、
という機能はよくあります。
railsのrestful-authenticationにも「remember_me」という名前で実装されています。
但し、この機能「30日間限定」で実装されている様子。
ログインしてから30日経つとログアウトしてしまいます。
mixiなどのコミュニティサイトの仕様を観察したところ、
クッキーの期限を「3年」くらいに設定している様子。
そこで remember_meの期限を「3年」に延長して対応することにしました。
コードの差分は以下。
vendor/plugins/restful-authentication/lib/authentication/by_cookie_token.rb
def remember_me # remember_me_for 30.days remember_me_for 3.years end
そんな感じ。