我有一个名为/ monsters的模板网址。在模板中,我有一个侧边栏
按类型排序:
我想知道什么是最好的方式来路由每一个?我猜这个网站会很好,比如
www.example.com/monsters/water
或
www.example.com/monsters/fire.
我应该怎么做呢?在我的routes.rb我想到了
match 'monsters/water', to: 'monsters#water'
match 'monsters/fire', to: 'monsters#fire'
match 'monsters/earth', to: 'monsters#earth'
match 'monsters/flying', to: 'monsters#flying'
等...
但我觉得这不是一个好方法。每次都有一个单独的比赛进行不同的比赛?有人可以帮我设计吗?非常感谢彻底和明确的帮助=)
感谢一堆=)
或者我应该开始使用单独的链接?我应该将所有内容发布到我的索引操作吗?我想过使用一个表单并使用:post但是那些已经被我的创建动作用于怪物。目前在我的索引页面(/ monsters)上列出所有这些因为在我的索引操作中,我只是做了一个
@monsters = Monster.paginate(page: params[:page])
答案 0 :(得分:3)
您需要的是:
resources :monsters, path: '/monsters/:category'
这将产生以下路线:
named path | verb | route | controller#action
| | |
monsters | GET | /monsters/:category(.:format) | monsters#index
monsters | POST | /monsters/:category(.:format) | monsters#create
new_monster | GET | /monsters/:category/new(.:format) | monsters#new
edit_monster | GET | /monsters/:category/:id/edit(.:format) | monsters#edit
monster | GET | /monsters/:category/:id(.:format) | monsters#show
monster | PUT | /monsters/:category/:id(.:format) | monsters#update
monster | DELETE | /monsters/:category/:id(.:format) | monsters#destroy
它可以让你做以下事情:
/monsters/fire => { controller: 'monsters', action: 'index', category: 'fire' }
/monsters/water => { controller: 'monsters', action: 'index', category: 'water' }
/monsters/earth/15 => { controller: 'monsters', action: 'show', category: 'earth', id: 15 }
另外,您仍然可以使用命名路径:
monsters_path('flying') => '/monsters/flying'
edit_monster_path('fire', 15) => '/monsters/fire/15'
链接到怪物,如:
<%= link_to monster.name, monster_path(monster.category, monster.id) -%>
答案 1 :(得分:2)
您应该指定一个接受变量段的通用路由,并使用它来加载正确类型的怪物:
match "monsters/:category" => "monsters#index"
...
class MonstersController < ApplicationController
def index
@monsters = Monster.find_by_category(params[:category])
end
end
您可以将:category
段设为可选,并修改索引操作以有条件地使用它(如果已传入):
def index
@monsters = Monster.find_by_category(params[:category]) if params[:category]
@monsters ||= Monster.all
end