「Ruby on Rails」カテゴリーアーカイブ
ActiveSupportのオートロード機能
以下の条件を満たせば、外部ファイルに対する読み込み宣言なしで、クラスが参照された瞬間に自動的に読み込まれる。
・ロードパス上にファイルを配置する。
・クラス(モジュール)名をアンダースコア化したファイル名にクラスを定義する。(アンダースコア化はActiveSupportのString#underscore, String#classifyで確認できる)
ログのANSIカラーエスケープシーケンスを無効にする
Journal InTime - #31 (spam filter support) , ログのANSIカラーエスケープシーケンス
config/environment.rbに、
ActiveRecord::Base.colorize_logging = false
Ruby-GetText
Ruby-GetText の導入
Ruby-GetText の導入 - Rails で行こう! - Ruby on Rails を学ぶ
Windowsの場合は、gtk+-win32-devel をインストールしておく。
Glade/Gtk for Windows
モデルの修正
モデルで修正する必要があるのは、独自の検証処理用メッセージと、データベースとは直接結びつかないフィールド。
フィールドは、N_('クラス名|フィールド名')で定義する。
パタメータ付きの翻訳
flash[:notice] = _('Event %{event} was successfully created.') % {:event => @event.title}
msgid "Event %{event} was successfully created." msgstr "イベント「%{event}」を登録しました。"
Ruby-GetTextの詳しい説明
Ruby on RailsでRuby-GetText-Packageを使う - よたらぼ 保管庫
ActiveRecord::Observer + GetTextで翻訳文字列が抽出できなくなる
Observerを使用していると、データベースのテーブル名とフィールド名が自動的に翻訳文字列として抽出されなくなる。以下に回避方法あり。
よたらぼ(2007-10-24)
Emacsでpoファイルを編集
MacOSXのCarbon Emacsで.poファイルを開いて編集しようとしたら、普通に編集できない。困ったなと思ったが、これはPOモードになっているからで、実は便利だった。
Rails Ruby-GetText は、emacs のPOモードでさらに快適:Goodpic
hメソッドはERB:Util.html_escape
Rails の便利メソッド h, html_escape は ERB:Util にあった - METAREAL
Rails のコントローラーで h メソッドを使うには以下のようにすればいい。
def update render :text => ERB::Util.html_escape(params[:value]) end
Glade/Gtk for Windows
SourceForge.net: Glade/Gtk for Windows
gtk+-win32-develをダウンロード。
gettextが含まれている。
EmacsでRuby on Rails
/home/dima :: Rails On Emacs (in english)
RubyForge: emacs-rails: Project Info
Mac OS X の場合
Carbon Emacsをインストールすれば、必要なファイルは含まれているので、それらを有効にするよう.emacs.elに記述すればよい。下記の.emacs.el記述例を参照。
Windowsの場合
- EmacsW32+Emacsをインストール。
※EmacsW32+Emacsは環境変数でSHELL=/bin/bashを設定しているとうまく動作しないので、cygwinのために設定している場合は削除する。 - 環境変数HOMEを設定
- 必要なelファイルをsite_lispにコピー
ruby\src\misc\*.el
inf_ruby.el
snippet.el
find-recursive.el - %HOME%\.emacs.dに、RubyForge: emacs-rails: Project Infoからダウンロードしたemacs-railsをコピー。
- %HOME%\.emacs.elを作成。
各elのコメントと/home/dima :: Rails On Emacs (in english)を参考にして、記述する。
.emacs.el記述例
(autoload 'ruby-mode "ruby-mode" "Mode for editing ruby source files" t) (setq auto-mode-alist (append '(("\\.rb$" . ruby-mode)) auto-mode-alist)) (setq interpreter-mode-alist (append '(("ruby" . ruby-mode)) interpreter-mode-alist)) (autoload 'run-ruby "inf-ruby" "Run an inferior Ruby process") (autoload 'inf-ruby-keys "inf-ruby" "Set local key defs for inf-ruby in ruby-mode") (add-hook 'ruby-mode-hook '(lambda () (inf-ruby-keys) )) (require 'find-recursive) (setq load-path (cons "~/.emacs.d/emacs-rails" load-path)) (require 'rails)
ruby-modeとruby-electricのセットアップ方法は、下記にも説明がある。
Emacs and Ruby | HyperionReactor
その他
Using Emacs for Rails development - The perfect setup « Devcraft
(関連)
pylori*style wiki - Emacs用rails.el
DynamicCalendarHelper
DynamicCalendarHelper in Ruby on Rails
インストール
runy script/plugin install http://topfunky.net/svn/plugins/calendar_helper/
migrationでforeign keyを定義する
UsingMigrations in Ruby on Rails
class CreateLineItems < ActiveRecord::Migration def self.up create_table(:line_items) do |t| t.column(:product_id, :integer, :null => false) t.column(:quantity, :integer, :null => false, :default => 0) end # This line is required if you're running a version of MySQL prior to 4.1.2 #add_index(:line_items, [:product_id], :name => 'fk_line_items_product') execute('ALTER TABLE line_items ADD CONSTRAINT fk_line_items_product FOREIGN KEY ( product_id ) REFERENCES products( id ) ') end def self.down drop_table(:line_items) end end
require_dependency
http://wiki.rails2u.com/require_dependency/
以下引用
require_dependency
require_dependencyってなんなんだろ。しょっちゅうrailsソース内ででてくるけど。ということで調べてみた。
require_dependencyを定義している場所activesupport/lib/active_support/dependencies.rbの
Object.send(:define_method, require_dependency) { |file_name| Dependencies.depend_on(file_name) }define_methodで定義してる。最初 'def
require_dependency'
で検索したけどひっかからなくてここにたどり着くまでそこそこ時間がかかった、、、。requireとの違い
require_dependencyで呼び出しているメソッド、depend_onは<code> def depend_on(file_name, swallow_load_errors = false) unless loaded.include?(file_name) loaded << file_name begin require_or_load(file_name) rescue LoadError raise unless swallow_load_errors end end end </code>同じ引数で呼び出されていなければrequire_or_loadメソッドを実行する。んでrequire_or_loadメソッドは
<code> def require_or_load(file_name) file_name = "#{file_name}.rb" unless ! load? || file_name[-3..-1] == '.rb' load? ? load(file_name) : require(file_name) end </code>1行目で.rbだったり拡張子無しだったりするときの処理を。つーか解りにくいよ…。
<code> file_name = "#{file_name}.rb" unless ( (! load?) || file_name[-3..-1] == '.rb') </code>load?がtrueじゃない、かつファイル拡張子が.rbじゃ無いならfilenameは"#{file_name}.rb"になる、か。ここはさして重要じゃなくて次の
<code> load? ? load(file_name) : require(file_name) </code>でload?メソッドがtrueならloadメソッドで呼び出し、そうじゃなかったらrequireメソッドで呼び出しを行う。んでloadメソッドは
<code> @@mechanism = :load mattr_accessor :mechanism def load? mechanism == :load end </code>と定義されているため、何にも変更しなきゃrequire_dependencyを使うとloadメソッドで読み込まれると。デフォルトのgeneratorで生成した場合、RAILS_ROOT/config/environments/development.rbには
<code>Dependencies.mechanism = :load </code>RAILS_ROOT/config/environments/production.rbには
<code>Dependencies.mechanism = :require </code>と記述されてるのでproductionだとloadじゃなくてrequireされる。
で、んじゃrailsにおけるloadとrequireの大きな違いって何って事ってになるけど、fastcgiやwebrickでrails使ってる場合はloadでライブラリをロードしたときはもう一度無条件ロードされるため、ライブラリソースに変更があった場合はその変更が反映される。
requireの場合はすでに読み込んであったら読み込まない。通常のcgiで使ってる場合にはほとんど変わりなし。だからdevelopmentではloadで、productionではrequireになってるんだね。自作ライブラリを作りったり修正したりしつつrailsの開発を進める場合はrequire_dependencyで読み込んでおくといいよ、と。