読者です 読者をやめる 読者になる 読者になる

ウェブサービスを作っています。

api.rubyonrails.org の NestedAttributes の説明が間違ってる気がする

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html accepts_nested_attributes_for の :allow_destroy の説明で class Member < ActiveRecord::Base has_many :posts accepts_nested_attributes_for :posts, :allow_dest…

WillPaginate で使う params[:page] に文字列が渡されると例外が発生する

ので、config/initializers/rails_ext.rb などに以下を追加。 module WillPaginate module Finder module ClassMethods def wp_parse_options_with_normalize_page(options) page, per_page, total = wp_parse_options_without_normalize_page(options) page…

Paperclip で保存先を動的に指定する

path とか url に proc を渡す。第1引数に Attachment オブジェクトが入ってきます。 has_attached_file(:header_image, :path => proc { |attachment| ":rails_root/public/images/games/#{ attachment.instance.code }/header_image.:extension" }, :url …

ブロック内を表示するヘルパーメソッドの作り方と RSpec によるテストの書き方

こんなの。 <% output_block_with_date do |t| %> 現在の時刻は、<%=h t %> です。 <% end %> ヘルパー。 def output_block_with_date(&blk) concat capture(Time.now, &blk) end concat は、 と同じような意味で、ビューに文字列を出力するメソッドです。 c…

Application Template

git + rspec + i18n な Application Template を gist に置いた。 最近は log, tmp ディレクトリなどがない場合、自動生成してくれるみたい。 gist: 84433 - GitHub 使い方は、 $ rails アプリ名 -m http://gist.github.com/84433.txt

validates_fullwidth_length_of プラグインを公開

全角単位で validates_length_of を実行する Rails プラグイン validates_fullwidth_length_of を GitHub で公開しました。 http://github.com/milk1000cc/validates_fullwidth_length_of/tree/master 詳しくは README をご覧いただきたいのですが、いわゆる…

DateHelperJa っぽいことを、プラグインなしでやる

date_select ヘルパーなどで、 のように表示したい場合、DateHelperJa プラグインが便利だったのですが、Rails2.1 では使えなくなっていました。 そこで Rails 2.1 対応にしてみたりしたのですが、Rails 2.2 にしたら、またしても使えなくなっていました。 …

拡張子付きリクエストのテスト方法

http://example.com/articles.rssのようなリクエストをテストする方法です。 config/routes.rb map.resources :articles app/controllers/articles_controller.rb class ArticlesController < ApplicationController def index respond_to do |format| forma…

フラグメントキャッシュを削除する rake タスク

desc "expire fragments" task :expire_fragments => :environment do RAILS_CACHE.delete_matched /hoge_hoge_cache/ end 文字列かハッシュでキーを指定する場合は、delete_matched の代わりに delete を使います。

Passenger (mod_rails) で、特定のホストからのアクセスを禁止する方法

httpd.conf などに書いて、Apache をリロードします。 <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/html/example/public <Location /> Order Allow,Deny Allow from All Deny from (アクセス禁止 IP) </Location> </VirtualHost>Location の代わりに、Directory ディレクティブを使うと pu…

RSpec on Rails のバグっぽい挙動について

RSpec on Rails で redirect_to のテストを書いていると、 ActionController::MethodNotAllowed Only get requests are allowed. や ActionController::MethodNotAllowed Only get, put, and delete requests are allowed. といった、謎の例外が発生すること…

最近の変化

<a href="#">解説を見る</a> のようなリンクを動的に生成する場合、以前は <%= link_to '解説を見る', game_path(game) %> みたく、極力ヘルパを使っていたのですが、最近は <a href="<%= game_path(game) %>">解説を見る</a> のように、最低限の部分だけヘルパを使うようになった気がします。 重複を省いたり、ク…

BASIC 認証を導入する

たとえば、ステージング環境などで常に BASIC 認証を必要とする場合、以下のようにすれば OK でした。 とっても簡単です。 ソースは、actionpack-2.1.1/lib/action_controller/http_authentication.rb あたり。 class ApplicationController < ActionControl…

2.1.0 で 1 始まりになった partial counter が 2.1.1 で 0 始まりに戻ってる

collection の渡された partial template では、ローカル変数 (partial template 名)_counter で、現在何回目のループなのかがわかるわけですが、これの始まりが Rails 2.1.0 から 1 になっていました (参照: Rails2.0から2.1への移行を試してみる - ザリガ…

わからない

read_inheritable_attribute がわかりません。 こういうのはそのうちわかると思うので、放置しておきます。

rspec_scaffold で吐かれる spec が初心者の参考になったりするかも

rspec のサンプルってなかなかなくて、モデルのバリデーションテストくらいは書けるけど、コントローラとかビューとか、とにかく、どうやって書いたらいいんだろ..って人は結構多いのではないかと思ったりします。 rspec_scaffold を使って生成される spec …

DateHelperJa プラグイン を Rails 2.1.0 に完全対応させる

追記(2008/12/21 9:41): Rails 2.2 では動きません。 先日の話の続きです。 ちゃんとわかった気がするので、エントリにします。 まずは DateHelperJa プラグインをインストールします。 script/plugin install http://softculture.com/rails/plugins/date_he…

DateHelper の :include_blank に文字列を指定できるようにする

Rails 2.1.0 です。 FormOptionsHelper の :include_blank には文字列を指定できるくせに、DateHelper には true しか指定できなくてむかついたので作りました。 module ActionView::Helpers::DateHelper def select_html_with_useful_include_blank(type, h…

content_tag とか tag は中身のエスケープはしない

content_tag :h2, '<b>太字</b>' は、 <h2>&lt;b&gt;太字&lt;/b&gt;</h2> とかなりません。 第 4 引数の escape は属性のエスケープに関するもので、 content_tag :h2, 'hoge', :style => '<b>太字</b>' の結果は <h2 style="&lt;b&gt;太字&lt;/b&gt;">hoge</h2> になります。 まあよく考えればわかるはずなんですが、ふつうに…

ドコモでも CSS を外部参照で使える docomo_css プラグインをリリース

milk1000cc/docomo_css · GitHub テスト書いてからリリースしようと思っていたのですが、 これ読んで今出さねばと思い、リリースです。 内容は、コントローラに class ApplicationController < ActionController::Base docomo_filter end とか書いとくだけで…

モデルの階層化

なんとなくやってみたらできました。 app/models/foo/bar.rb class Foo::Bar < ActiveRecord::Base end Foo::Bar.find(:all) とか、できます。 テーブル名は、foo_bars と考えられるようです。 has_many :foo_bars とかでアソシエーションもうまく動いてるっ…

find_or_initialize_by_xx(yy) を勘違いしてた

Model.find_or_initialize_by_xx(yy) は、 Model.find_by_xx(yy) || Model.new と同じだと思ってました。でも、 Model.find_by_xx(yy) || Model.new(:xx => yy) と同じっぽいですね。 xx が yy なのを検索して、なかったら yy で xx を初期化する。

DateHelperJa プラグインが Rails 2.1 で動かない問題

(追記 2008/07/13) 直し方のエントリをあげました。 DateHelperJa プラグイン を Rails 2.1.0 に完全対応させる - milk1000cc Rails を 2.1 にしたら、DateHelperJa プラグインが動かなくなってしまいました。 wrong number of arguments (2 for 1)エラーと…

:id => @post と :id => @post.id は違う

<% @post = Post.find(1) -%> <%= link_to ':id が @post', :action => :index, :id => @post %> <%= link_to ':id が @post.id', :action => :index, :id => @post.id %> ってあったときに、この 2 つの link_to はふつうは同じで、 <a href="/home/index/1">:id が @post</a> <a href="/home/index/1">:id が @p</a>…

redirect_to and return if

今まで redirect_to :action => :index if data.blank? return みたいに書いてたとこが、 redirect_to :action => :index and return if data.blank? みたいに書けるってはじめて知りました。 英語っぽいー。 data.blank? が評価されて、redirect_to が実行…

Rails of Ruby on Rails

のりおさんの本です。衝動買いしました。 Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~作者: Plan de Sens,清水智雄出版社/メーカー: 毎日コミュニケーションズ発売日: 2008/05/14メディア: 単行本(ソフトカバー)購入: 3人 クリック: 90回この商…

プラグインの削除

より。 script/plugin remove -v plugin_name でいけます。 まぁ、それはいいんですが、vendors/plugins 以下にプラグインって入るから、フォルダごと消せばいいんじゃないの? と思っていたりしました。 で、ソースを読んでみたところ、それではいけない場合…

メモ

options_for_select と options_from_collection_for_select を覚えました。

メモ

update_attribute_with_validation_skipping なんてメソッドあるのか。 なんとなくメモ。

OS 再起動時に mongrel を自動起動する

kokoromo さんにヒントをもらったシンプルな方法。 /etc/rc.local に以下を追加する。 /usr/local/bin/mongrel_rails start -d -e production -c /home/hoge/app_name -p 4000 /home/hoge/app_name と 4000 は環境に応じて変更してください。 シンプルでよさ…

emacs-rails で *.html.erb を有効にする

Rails2.0 だとビューファイルの拡張子が *.html.erb 推奨になっているようなのですが、なんかこれ emacs-rails がわかってくれないようで、コントローラでの C-c C-p とか、うまくいきません>< なので、emacs-rails/rails.el の (defvar rails-templates-l…

選択肢を DB から読み込んでセレクトボックスを出力

<%= form.select :category_id, Category.find(:all).collect { |c| [c.name, c.id] }, :include_blank => '選択してください' %>

ビューで複数モデルを扱う

form_for を使うと、1モデルしか扱えない(はず)。 だから <% form_for :member, :url => { :action => :create } do |form| %> 名前: <%= form.text_field :name, :size => 20 %> <% end %> みたいなのだと、Member モデルしか扱えない(はず)。 次のようにし…

モデル名を複数にして作成したせいで 1 時間くらい悩んだ。 終わっている。

ハマる

Rails はじめました。 手始めに、チュートリアルをやってみたのですが、データベース関連のコードを書いたところでエラーが発生。 エラーメッセージも、ActiveRecord::StatementInvalid とか意味不明。 で、1 時間以上悩んで解決。 原因は、database.yml を…