无法在控制器中添加子页面

时间:2011-04-14 04:52:26

标签: ruby-on-rails

使用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 提供一些内容shopscountries,我想要:

id

我无法首先在空代码中显示这些页面。我做错了什么?

感谢。

2 个答案:

答案 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.rbShops.rb

然后您将嵌套资源,如

resources :cities do
     resources :shops
end

你需要在商店模型中使用belongs_to :city,在城市模型中使用has_many :shops,这样您就可以访问城市/ 1 /商店....或类似的东西

然而,考虑一下数据结构的方式,各国真正属于城市(资源嵌套意味着什么)或国家是否包含城市。你会想要城市belongs_to :country等等......

这有帮助吗?