Rails 3について私が学んだことが1つあるとすれば、何かをするのに苦労しているのなら、おそらくそれは間違っているのでしょう。だから私は助けを探しています。
多対多の関係にあるモデルがいくつかあります。
モデルに関連付けを問題なく作成できます。私の問題は、これらの関係を処理するコントローラーを構築する方法にあります。私がこれでどこに行くのかわからない場合は、例を挙げてみます。
例えば...
class Account < ActiveRecord::Base
has_many :locations
end
class Contact < ActiveRecord::Base
has_many :locations
end
class Location < ActiveRecord::Base
has_and_belongs_to_many :accounts
has_and_belongs_to_many :contacts
end
上記のモデルがあるとしましょう。これが私のリソースになります...
resources :accounts do
resources :locations
end
resources :contacts do
resources :locations
end
resources :locations do
resources :accounts
resources :contacts
end
したがって、これを少し短くするために、アカウントのすべての場所のリストが必要だとします。上記のルートは、おそらくアカウント/1/場所になります。したがって、locations#indexに着陸します。
うまくいけば、この時点で私の例を台無しにしていませんが、実際には複数のジョブがあるため、このアクションを構築するための最良の方法は何ですか...少なくともアカウント、連絡先、およびすべての場所の場所。
だから私はこのようなものになってしまいます...
class LocationController < ApplicationController
def index
if params[:account_id]
@locations = Location.find_all_by_account_id(params[:account_id])
elsif params[:contact_id]
@locations = Location.find_all_by_contact_id(params[:account_id])
else
@locations = Location.all
end
respond_with @locations
end
end
更新#1:明確にするために、モデルの関係を変更することを示唆するいくつかの回答を得ています。この時点で関係を変更できないレガシーシステムを使用しています。最終的にはデータベースと関係をクリーンアップすることが私の目標ですが、今のところできません。したがって、この構成で機能するソリューションを見つける必要があります。