2

我是 Rails 开发的新手。我需要有关必须在我的应用程序中编写的路线的帮助。我有以下模型:类别、ItemTypes 和 Items。一个类别可以有许多项目类型,而这些项目类型又可以有许多项目。

我需要编写类似这样的路线:

www.domain.com
-主屏幕。在主屏幕中,我将显示类别列表

当一个类别被点击时,我应该显示属于该类别的所有项目,即该类别和 url 的所有项目类型的项目应该像

www.domain.com/category-name

项目列表页面将有项目类型的下拉列表。当用户选择项目类型时,用户可以从中过滤项目,URL 应该是这样的

www.domain.com/category-name/item-type-name/items

请帮助我为这些案例编写路线。顺便说一句,以下是我编写的模型

   class Category < ActiveRecord::Base
     has_many :item_types
     has_many :items, :through => :item_types, :source => :category

     attr_accessible :name, :enabled, :icon
   end

  class ItemType < ActiveRecord::Base
        belongs_to :category
        has_many :items
  end
  class Item < ActiveRecord::Base
        belongs_to:item_type
  end

提前致谢

4

1 回答 1

2

首先,在 routes.rb 中:

# Run rake routes after modifying to see the names of the routes that are generated.
resources :categories, :path => "/", :only => [:index, :show] do
  resources :item_types, :path => "/", :only => [:index, :show] do
    resources :items, :path => "/", :only => [:index, :show, :new]
  end
end

然后,在您的 category.rb 模型中:

def to_param # Note that this will override the [:id] parameter in routes.rb.
  name
end

在您的 categories_controller.rb 中:

def show
  Category.find_by_name(params[:id]) # to_param passes the name as params[:id]
end

在您的 item_type.rb 模型中:

def to_param # Note that this will override the [:id] parameter in routes.rb.
  name
end

在您的 item_types_controller.rb 中:

def show
  ItemType.find_by_name(params[:id]) # to_param passes the name as params[:id]
end

我建议向您的模型添加 before_saves 和验证,以确保名称是 HTML 安全的,类似的东西name = name.downcase.gsub(" ", "-")应该让您开始使用 before_save(但它绝不是全面的)。

于 2012-09-10T15:51:40.977 回答