2

私はRails開発の初心者です。アプリケーションに書き込む必要のあるルートについてサポートが必要です。次のモデルがあります:Categories、ItemTypes、Items。1つのカテゴリには多くのアイテムタイプを含めることができ、そのアイテムタイプには多くのアイテムを含めることができます。

私はこれに似たルートを書く必要があります:

www.domain.com-
homescreen。ホーム画面にカテゴリのリストを表示します

カテゴリがクリックされると、そのカテゴリに該当するすべてのアイテムを表示する必要があります。つまり、そのカテゴリのすべてのアイテムタイプのアイテムと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_save とバリデーションを追加して、名前が HTML セーフであることを確認することをお勧めしますname = name.downcase.gsub(" ", "-")

于 2012-09-10T15:51:40.977 に答える