私はこのようなクラスを持っています:
class Project < ActiveRecord::Base
has_many :versions, :order => :position
end
コントローラー アクションで、プロジェクトのバージョンを照会する必要があります。私はプロジェクトIDを持っています。私は単に行うことができます
versions = Project.find(params[:project_id]).versions
ただし、これは最初に「projects」テーブルへのクエリを実行しますが、これは私の場合は不要です。私はそれをに変更することができました
versions = Version.find( :conditions => { :project_id => params[:project_id } )
(または同じ結果で動的ファインダーを使用します)
これは関連付けの追加の属性 (この場合は ":order => :position") を使用しないため、同じ例とまったく同じ結果を得たい場合は、次のように記述する必要があります。
versions = Version.find( :conditions => { :project_id => params[:project_id },
:order => :position )
ここでは、モデルで既に定義されている何か (「:order」オプション) を繰り返しているため、DRY ではなくなりました。
親オブジェクトをロードせずに、モデルで定義された関連付けを使用して従う方法はありますか? 現在も Rails 2.3.8 を使用しています。