Rails
完全に自分用の備忘録。VirtualBox にインストールした CentOS5.6 に表題の環境を構築してサーバを動かすまで。 サーバのメモリは512Mでパーティションは40Gと、(記事執筆時では)一般的な低価格帯 VPS を意識したスペックに調整してあります。 また、すべ…
ApplicationController に以下のような認証用のメソッドを定義する事は、よくあると思います。 # coding: utf-8 class ApplicationController < ActionController::Base # 略 def current_user # ログイン中のユーザオブジェクトを返す end def logged_in? #…
ストアドプロシージャにまつわる諸々は MySQL のマニュアル等をご参照のこと。ここでは SQL レベルのお話にとどめます。 MySQL 側でストアドプロシージャを用意する 今回はきわめて簡単な SELECT 文をストアドプロシージャとして定義します。 CREATE PROCEDU…
Ruby 1.9.2 + Rails 3.0.3 の環境で表題のエラーが発生。データベースからマルチバイト文字列を取得する事は出来るのですが、多言語対応のための config/locales/ja.yml やビューの日本語が読み取れない様子。エラーの原因をトレースしていくと、以下のファ…
月別アーカイブを作成したい時などに DBMS 独自の時刻関数を使う事は多いと思いますが、今回そのあたりに関連して ActiveRecord の挙動でハマったのでメモ。例えば次のような SQL を PostgreSQL の psql コマンドから実行したとします(データベースに costs…
例えば次のような scope を costs.rb に定義します。 class Cost < ActiveRecord::Base scope :next, lambda{|day| where(["occured_on > ?", day]).order("occured_on").first } end これはシンタックスエラーにはなりませんが、実行すると次のようなエラー…
社内でテスト運用しているアプリを Rails 3.0 + PostgreSQL 9.0 + Unicorn + Nginx で動かそう!という話になって、とりあえず Unicorn 単体で Rails アプリを起動するところまでこぎつけたのですが、なぜか public 以下に置かれたファイルが 404 Not Found …
本題に入る前に、そもそも RJS とは何なのかを説明すると、本来 jQuery の $.ajax() などを使ってごりごり書かないといけなかった JavaScript による非同期通信をフレームワーク側で吸収して、通常の html ビューのレンダリングと同じ感覚で記述できるように…
Rails で Cucumber を使っていて、デフォルトのステップ定義はどこでしてるんだろう?と気になったので調べてみました。結論から言うと Rails.root/features/step_definitions 以下に入っています。てっきり gem の方にあるのかと思って、そっちを必死に gre…
表題の通り、なぜか Scaffold で作った date_select が動かなかったので。Can't convert Symbol into String だそうなので、エラーを追いかけるとどうやら config.i18n.default_locale = :ja とした時に date_select にきちんと値が渡らなくなる様子。該当す…
びぼうろく。Mac OSX 10.5 上で Rails 3.0 と RSpec 2.0 を使ってテストをします。 インストール 利用する gem を RAILS_ROOT/Gemfile に記述します。 group :development, :test do gem 'rspec', '>=2.0.0.beta.20' gem 'autotest' gem 'rspec-rails', '>=2…
備忘録。Mac OSX 10.5 環境で Rails 3.0 を使って cucumber でテストを書きます。 インストール 主に下のリンクを参照しました。http://d.hatena.ne.jp/yuunachan/20101004/1286161317なお、私の環境(Mac OSX 10.5)では Nokogiri が libxml2 のバージョン…
Rails3.0 で導入された Arel を試してみたら、なかなか面白い動きをしていました。 Unit を継承した Expense モデルが Reason に紐づいている(belongs_to)として、以下のような scope を作ります。 scope :monthly, lambda {|month| includes(:reason).whe…
Rails 向けの Comet サーバ Juggernaut を使います。サンプルとして、ごくごく簡単なチャットシステムを作ります。公式サイトは以下。http://juggernaut.rubyforge.org/ 準備 Ruby on Rails はインストール済として、他に必要なものをインストールします。と…
諸事情で Rails 1.1.6 を使っているため、最近の事情には合致しないかもしれませんが、以下のような違いがありました。データベースには MySQL を使っています。items と users が多対多の関係で、中間テーブルに item_users を用いているとします。高速化の…
MySQL で WHERE 句に IN を指定するとき、以下のような挙動を起こします。 select * from table where id in (1,2,3); この場合、(存在する限り、以下同様)id が 1, 2, 3 のレコードが取得されます。 select * from table where id in ("1","2","3"); この…
某社の皆さんにも確認したのですが、やはり blog のサイドバーのような(公開されている)すべてのページに含まれる動的アイテムは partial や helper と before_filter などで用意するのが一般的なようです。以前存在した components という考え方は Rails …
定期的に rails render controller で検索される方がいるようなので、もう一度まとめ。 まず rails の ActionController の render に :controller オプションはありません。コントローラをまたいだレンダリングを行いたいなら :template か :file オプショ…
何かで困ったときや、既存のモデルに counter_cache を使いたくなったときなどに。どうやら readonly になっているらしく、以下のメソッドを使わないと更新できないようです。 Item.update_counters(id, :column_name => number) id には更新したい対象の id…
この blog には表示していませんが、2009年1月のアーカイブ、のように月別で記事の一覧を表示している事はよくあります。 あれを Rails で行うとなると、こんな感じになると思います。 # 条件を年と月に設定してグループ化し、記事数をカウント archives = P…
Rails で静的コンテンツを置く場所は RAILS_ROOT/public 以下が一般的です。ですが、レイアウトは共有したいとか、そもそも公開された場所に置きたくないという場合は少し工夫する必要があります。今回は html を任意に呼び出して表示するサンプルを載せてみ…
active_scaffold の内部で attachment_fu を動かす方法の解説。Attachment というあらゆる種類のデータをアップするモデルを使うものとして解説します。 ファイルのアップロード まずはコントローラ attachments_controller を編集します。 class Attachment…
HParser から始まってパーサを調べていたら WikiForme という俺様用パーサ作成装置を発見しました。これを Rails に導入してみます。 まずは CodeRepos に最新版と思しきソースが公開されているので、そこからソースを拾います。 svn co http://svn.coderepo…
前回は動かすだけ動かして満足してしまったので、国際化について軽く補足。私が理解している範囲の話かつ、今後どんどん改良が進みそうな分野なので情報が陳腐化する可能性大。 デフォルトの言語設定 国際化の前に、デフォルトの言語設定は config/embironme…
いつの間にできたんだこんなの。以前の記事で別コントローラのビューを呼び出すのに悪戦苦闘していましたが、これ使えば楽勝みたいですね。 # comments_controller 内部とお考え下さい # post has_many comments とお考え下さい # map.resources の has_many…
Leopard には標準で RubyGems や Rails が入っているのですが、 Tiger はそうもいきません。一々ノーパを持ち込むのもだるいので、学校の俺専用と化したマシンにインストール作業を行ってきました。 一応、普通のインストールメモとしても利用可能。特に学校…
RubyAMF の続き、今度は関連を扱います。一対多と多対多のケースについて。 ここを読む前に、以前の記事を参照してとりあえず RubyAMF を動かしてみることをオススメします。 一対多のサンプル 以下のようなモデルと関連を考えます。ユーザ登録画面のユーザ…
RubyAMF とは Flash と Rails の間でオブジェクトの相互変換を行ってくれるプラグイン。 サンプルでは Hello World の送信をしているくらいのものしかなかったので、モデルの情報を Flash 側から入力して Rails で受け取るまでの最小限のサンプルコード。例…
コード def if_found(obj, msg = "デフォルトのエラーメッセージ", action = "index", controller = controller_name) if obj yield if block_given? else flash[:error] = msg redirect_to :controller => controller, :action => action end end 使い方 ま…
サブクラスの作成等を、 Rails が受け持ってくれる機能について。ファイルのアップロードなど、場合によって validation の条件を分けたりしたい時などにも便利です。 前提 Rails の機能で簡単にサブクラスを作成する場合、親クラスに type というカラムを s…