1

私のモデルは次のとおりです。

class City < ActiveRecord::Base
  belongs_to :region
  has_many  :activities
  has_many  :restaurants
end


class Activity < ActiveRecord::Base
    belongs_to :city
end

すべての都市からすべてのアクティビティにアクセスしたい。stackoverflow に関する以前の質問から、この @cities.activities を実行できないことを読みました。代わりに、次のことを行いました。

リージョンへの関連付けを通じて has_many を追加します

class Region < ActiveRecord::Base
  has_many :activities, :through => :cities
end


@activities = @region.activities.find_all_by_homepage_city(true)

しかし、変数 @activities を呼び出すときは、polymorphic_path を使用します。

- @activities.each do |b|
              %li 
                =link_to b.name, polymorphic_path([@region, @city, b])

「region_activity_path のメソッドではありません」というメッセージが表示されます。リソース: リージョンの後にリソース: アクティビティがないため、これは正しいです。

resources :regions do 
  resources :cities do
  resources :activities 

リージョンの後にアクティビティ リソースを追加できますが、URL が正しくありません。どうすればこれを修正できますか?

4

1 に答える 1

0

厳密に必要な場合を除き、ルートの生成中に 2 レベルを超えてはならないという規則があります。

choose simple route for activity3レベルのルートではなく、あなたをお勧めします:)

それでも必要なら -

rake routes | grep activi

region_city_activities GET      /regions/:region_id/cities/:city_id/activities(.:format)          {:action=>"index", :controller=>"activities"}
                           POST     /regions/:region_id/cities/:city_id/activities(.:format)          {:action=>"create", :controller=>"activities"}
  new_region_city_activity GET      /regions/:region_id/cities/:city_id/activities/new(.:format)      {:action=>"new", :controller=>"activities"}
 edit_region_city_activity GET      /regions/:region_id/cities/:city_id/activities/:id/edit(.:format) {:action=>"edit", :controller=>"activities"}
      region_city_activity GET      /regions/:region_id/cities/:city_id/activities/:id(.:format)      {:action=>"show", :controller=>"activities"}
                           PUT      /regions/:region_id/cities/:city_id/activities/:id(.:format)      {:action=>"update", :controller=>"activities"}
                           DELETE   /regions/:region_id/cities/:city_id/activities/:id(.:format)      {:action=>"destroy", :controller=>"activities"}

rails c

-> app.polymorphic_path([Region.last, City.first, Activity.last])
 => "/regions/28/cities/1/activities/12"
-> app.polymorphic_path([Region.last, City.first, Activity.new])
 => "/regions/28/cities/1/activities"
于 2012-08-14T11:44:46.370 に答える