使用RoR 2.3.8
这是我的cities_controller.rb
class CitiesController < ApplicationController
def show
@city = City.find(params[:id])
...
end
def shops
...
end
def countries
...
end
end
这是我的routes.rb
map.resources :cities, :collection => {:shops => :get, :countries => :get}
每个show
的{{1}}网址为:
id
我想为每个关联的http://localhost/cities/1
提供一些内容shops
和countries
,我想要:
id
我无法首先在空代码中显示这些页面。我做错了什么?
感谢。
答案 0 :(得分:4)
:collection
选项适用于您想要对整个集合采取行动的情况 - 因此您的路线将显示为:
http://localhost/cities/shops
http://localhost/cities/countries
你想要的是
map.resources :cities, :member => {:shops => :get, :countries => :get}
参考:http://apidock.com/rails/ActionController/Resources/resources
答案 1 :(得分:0)
商店和国家可能不是控制器中的方法,而是其他型号。您需要Countries.rb
和Shops.rb
然后您将嵌套资源,如
resources :cities do
resources :shops
end
你需要在商店模型中使用belongs_to :city
,在城市模型中使用has_many :shops
,这样您就可以访问城市/ 1 /商店....或类似的东西
然而,考虑一下数据结构的方式,各国真正属于城市(资源嵌套意味着什么)或国家是否包含城市。你会想要城市belongs_to :country
等等......
这有帮助吗?