2个视图的嵌套路由

时间:2014-08-19 07:51:37

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个简单的网站,其中包含由商品组成的菜单,客户可以通过信用卡付款来订购食品。

我想把菜单分成午餐'和晚餐',我已经为每个项目创建了一个menu_type字段,但我不确定如何在不破坏嵌套路径的情况下创建视图。

我基本上需要2个午餐菜单和晚餐菜单的新视图,然后将它们添加到路线中。

控制器

class ItemsController < ApplicationController
  def index
    @items = Item.all
  end
  def lunch_menu
    @items = Item.where(:menu_type => 'Lunch')
  end
  def dinner_menu
    @items = Item.where(:menu_type => 'Dinner')
  end
end

模型

class Item < ActiveRecord::Base
  attr_accessible :description, :is_live, :price_in_pence, :menu_type, :title

  has_many :order_items

end

路线

resources :items, :path => "menu", only: [ :index ] do
    resource :basket, only: [ :create, :destroy ]
end

2 个答案:

答案 0 :(得分:1)

你可以做......

def index
  Time.now.hour > 4 ? dinner_menu : lunch_menu
end

也就是说您仍然使用一条路线,但根据某些外部标准调整所选项目。我建议一天中的时间,但您可能有一个start_menu操作,设置会话变量,以确定它是否是您当前正在使用的午餐或晚餐菜单。

答案 1 :(得分:1)

您已经在控制器中执行了操作,因此只需创建与其关联的视图,然后按如下方式更改路径:

resources :items, :path => "menu", only: [ :index ] do
    resource :basket, only: [ :create, :destroy ]
    collection do
       get "lunch_menu"
       get "dinner_menu"
    end
end

这将为您提供/items/lunch_menu/items/dinner_menu

的路线