非レール アプリケーションによって作成された 3 つのテーブルがあります。次のモデルは、テーブルの単なる関連付けです。
class Client < ActiveRecord::Base
has_many :programs
has_many :locations, :through => :programs
end
class Program < ActiveRecord::Base
belongs_to :location
belongs_to :client
end
class Location < ActiveRecord::Base
has_many :programs
has_many :clients, :through => :programs
end
クライアントの場所ごとにすべてのプログラムを一覧表示する簡単な方法が欲しいです。
次のコードは機能すると思いましたが、その場所のすべてのプログラムを返します。これは完全に理にかなっています。
@client.locations.each do |location|
<h2>location.name</h2>
<ul>
location.programs.each do |program|
<li>program.name</li>
end
</ul>
end
私は現在使用しています
@client.locations.each do |location|
<h2>location.name</h2>
<ul>
Program.where(:location_id => location.id, :client_id => @client.id).each do |program|
<li>program.name</li>
end
</ul>
end
しかし、これは MVC の原則に反するものであり、醜いものです。
このコードをエレガントに書く方法がわからないので、ご意見をいただければ幸いです。