1

私が2つのモデルを持っているとすると:companylocation。Acompanyにはたくさんありlocationsます。ライアンベイツの名前付きルートはとても面白い
と思いました。 そこで、モデルごとにリソースを追加しました。
routes.rb

resources :companies
resources :locations

<%= link_to "Companies", companies_path %>これにより、結果がのような名前付きルートに基づいてリンクを生成できますhttp://localhost:3000/companies

次に、それらが属するものにlocations基づいてリストをフィルタリングします。company名前付きルートを使用する前に、次のようなリンクを追加してこれを実現しました。

<%= link_to "Locations for this company", { :controller => 'locations', :action => 'list', :company_id => company.id } %>

ここでは、アクションで場所をフィルタリングするcompany_idにを渡します。LocationsControllerlist

def list
  @locations = Location.order("locations.id ASC").where(:company_id => @company.try(:id))
end
4

2 に答える 2

2

ロケーションモデルで何をする必要があるかに応じて、ネストされたリソースを使用することをお勧めします。

resources :companies do   
    resources :locations 
end

次に、レーキルートを実行します。これにより、次のようなあらゆる種類の新しい、より優れたルートが得られます。

会社/ID/場所

于 2011-03-23T17:40:48.970 に答える
2

1つのオプション:

  resources :companies do
    get :list, :controller => :locations
  end

このルートを生成します:

   company_list GET    /companies/:company_id/list(.:format) {:action=>"list", :controller=>"locations"}

そして、これはあなたにcompany_listヘルパーメソッドを提供します。

ただし、これは

  resources :companies do
    get :list, :controller => :locations
    resources :locations
  end

代わりに、の代わりにLocationsControllerのアクションを指すヘルパー提供します。company_locationsindexlist

 company_locations GET    /companies/:company_id/locations(.:format)          {:action=>"index", :controller=>"locations"}

後者の方がRESTfulですが、あなたは開発者なので、どちらの名前がより役立つかを決めることができます。

欠点は、Locationsコントローラーのほとんどのアクション/ヘルパーが:company_idまたはインスタンス化されたCompanyモデルをアタッチすることに依存していることです。

編集

3番目のオプション:

resources :companies do
  get :list, :controller => :locations
end
resources :locations

'company_list'ルートを除いて、会社によってフィルタリングされる場所の必要性はあまりないと主張するので、これが最善のようです。

于 2011-03-23T17:52:50.250 に答える