2012-08-14 79 views
1

我的車型有:關係=>通過polymorphic_path?

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


class Activity < ActiveRecord::Base 
    belongs_to :city 
end 

我想從存取權限所有城市的所有活動。從計算器前一個問題,我看我能不能做到這一點@ 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]) 

我收到消息「not method for region_activity_path」。這是正確的,因爲沒有資源:資源後活動:地區

resources :regions do 
    resources :cities do 
    resources :activities 

我區之後添加活動的資源,但然後我的網址是不正確的。我怎樣才能解決這個問題?

回答

0

有一種慣例,你不應該超過2級,而生成路線,除非它是嚴格需要的。

我建議你choose simple route for activity路線:)

不過,如果你需要,然後,而不是3級 -

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" 
+0

這是需要在現場和不同的(SEO)的URL結構和usabilty的情況下, landingpages。 – Remco 2012-08-14 11:52:17

+0

其實我可以看到越來越正確生成路線..看看更新的答案 – 2012-08-14 13:25:30

+0

我有同樣的路線...... 但是當我使用 的has_many:活動:通過=>:在區域示範城市 ... polymorphic_path expect region_activity_path和那個資源不在我的路由文件中... – Remco 2012-08-14 14:18:42