2011-11-23
Rails3 学習ログ 4
自分用 auto_load なディレクトリを用意する
in config/application.rb
# コメントアウト config.autoload_paths += %W(#{config.root}/extras)
あると便利です。
lib ディレクトリが デフォルトで autoload_paths に入っていないというのが、
Rails2 から Rails3 になったときに変わったことらしく、
Rails2 で 作ったアプリケーションをRails3化するときのチェックポイントでもあるようです。
これは発見した過去のディスカッションログ。
https://rails.lighthouseapp.com/projects/8994/tickets/5218-rails-3-rc-does-not-autoload-from-lib
個人的には現在の 通常のlibと別に明確な autloaded なディレクトリがある、という仕様が好きです。
前回調べた、「すべてのgemについて lib/railtie.rb が定義されていれば、Rails3アプリとして認識する」
という性質を考えると、RAILs_ROOT/lib だけが auto_loaded とすると一様性が減るし、
全ての gem の lib が auto_loaded とすると横暴なかんじになります。
sass の partials をどこに置くか
lib/assets ディレクトリも気になりますが、
本体が app/assets/stylesheets/ 以下にあるのであまり遠くには置きたくないと思いました。
開発環境での sprockets の性質として、
デフォルトでは app/assets/stylesheets 以下のファイルを
1つずつ stylesheet link tag 化しているようなのですが。
それを命令しているのが、app/assets/stylesheets/application.css の一部分。
/* require_tree .
このドキュメント中のコード例か何かかと思ったものが コードでした。
require_tree は サブディレクトリ以下のファイルも全て stylesheet link tag 化します。
/* require_directory .
とすることで一階層だけにしてもらうと、
RAILS_ROOT / app / assets / shared
に partials を置くことができました。
rails g controller 時には --no-assets オプションをつけることが多いです。
ActiveRecord の Association とか Relation とか
ActiveRecord::Relation
scope を表現しているのが ActiveRecord::Relation。SequelでいうところのDataset.
内容の確認には #to_sql が便利そうです。
Article.scoped.class #=> ActiveRecord::Relation Article.scoped.to_sql #=> 'SELECT * from articles'
このクラス名が Relation なのが少し疑問に思うのは、
私がこの単語に持っているイメージが間違っているのかな。
ActiveRecord::Reflection::AssociationReflection と ActiveRecord::Association
モデルとそのassociationを以下のように定義した場合に、
class Article < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :article end
クラス単位で情報を持っているのが AssociationReflection
Article.reflections[:comments].class #=> ActiveRecord::Reflection::AssociationReflection
レコード(インスタンス)単位での情報を担当するのが Association
record = Article.find(1234) record.association(:comments).class #=> ActiveRecord::Association record.association(:comments).scoped.class #=> ActiveRecord::Relation record.association(:comments).scoped.to_sql #=> 'SELECT * FROM comments WHERE article_id = 1234"
Association#scoped のスコープが
record.association(:comments).target_scope # Comment のデフォルトスコープ record.association(:comments).association_scope # SELECT * FROM comments WHERE article_id = 1234
の2つのスコープをマージして作られているのが面白かったです。
例えば Comment に deleted_at IS NULL 等のデフォルトスコープが設定されている場合に、
record.association(:comments).association_scope.all
- 502 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC0QFjAA&url=http://d.hatena.ne.jp/PvP/20090516&ei=XYUiT4DBC4SsiQLVo7XQBw&usg=AFQjCNEHKxtTdtwcJFE9-mxcCk8M7gc-Wg&sig2=w7KOO6DhLk6NPhhcc3GqEQ
- 192 http://www.google.co.jp/url?sa=t&rct=j&q=git fetch pull&source=web&cd=1&ved=0CB8QFjAA&url=http://d.hatena.ne.jp/PvP/20090516&ei=7-bMTrFNy6CZBY6tjM0N&usg=AFQjCNEHKxtTdtwcJFE9-mxcCk8M7gc-Wg&sig2=NbfzcGPljFQHjSU6gYrkjw&cad=rja
- 164 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1330951467955&ved=0CDIQFjAB&url=http://d.hatena.ne.jp/PvP/20090206/1233895116&ei=KLVUT-veGsf3mAWMs5W6Cg&usg=AFQjCNF_vDtSAcvCEg7aG_4Q0l61Ol1tTg&sig2=r3uREH062BmGzH5KBJpt7g
- 148 http://www.google.co.jp/url?sa=t&rct=j&q=git pull fetch&source=web&cd=1&ved=0CCIQFjAA&url=http://d.hatena.ne.jp/PvP/20090516&ei=GsLMTr_pEsfLmAWj4YWoDQ&usg=AFQjCNEHKxtTdtwcJFE9-mxcCk8M7gc-Wg
- 100 http://www.google.co.jp/url?sa=t&rct=j&q=git+fetch+pull&source=web&cd=1&ved=0CCAQFjAA&url=http://d.hatena.ne.jp/PvP/20090516&ei=cJLMTqXRLuvJmQXNjZ2-DQ&usg=AFQjCNEHKxtTdtwcJFE9-mxcCk8M7gc-Wg
- 99 http://www.google.co.jp/url?sa=t&rct=j&q=git gc&source=web&cd=2&ved=0CCYQFjAB&url=http://d.hatena.ne.jp/PvP/20090701&ei=NQvNTsa5DcnzmAWupcTUDQ&usg=AFQjCNH1WTAsOEi6DgvjnPfsbm67PVTyOw&sig2=yDMNryn4hs_02-OsuM2dzg
- 86 http://www.google.co.jp/url?sa=t&rct=j&q=scala flatmap&source=web&cd=1&ved=0CCcQFjAA&url=http://d.hatena.ne.jp/PvP/20110427/1303882687&ei=DNTPTsOABquOmQXT96SuDQ&usg=AFQjCNFNQLe7REhd2y2vVMyWBbNGozu_Pg&sig2=2stO6WQSAAF6hWG_4SiE9Q
- 79 https://www.google.co.jp/
- 72 http://www.google.co.jp/url?sa=t&rct=j&q=git+pull+fetch&source=web&cd=1&ved=0CCMQFjAA&url=http://d.hatena.ne.jp/PvP/20090516&ei=-73MTvOwEuvnmAWkq6DgDQ&usg=AFQjCNEHKxtTdtwcJFE9-mxcCk8M7gc-Wg&sig2=yR-Uyn2HikRXyHm6iJ5vZA
- 71 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CEMQFjAC&url=http://d.hatena.ne.jp/PvP/20090710&ctbs=lr:lang_1ja&ei=p5AyT8O5GYHHmQXbsPW6BQ&usg=AFQjCNHv1MuXODL5iqFk_kFvLbvXeOYjfg