【发布时间】:2017-12-09 08:53:31
【问题描述】:
好吧.. 我的导航栏中有一个带有多个下拉菜单的网站。有点像这样:
Gran Turismo(第一个标题下拉到:)
- PS4
- PS3 等
Forza(第二个标题下拉到:)
- PS4
- PS3 等..
我的目标是当我点击其中一个下拉菜单时,它会使用路线显示一个显示页面:
www.mysite.com/forza/ps4
每个人都告诉我应该将has_many :through 用于我称为平台的第三个模型。
因此我的模型是这样的:
class Game < ApplicationRecord
has_many :platforms
has_many :consoles, through: :platforms
end
class Console < ApplicationRecord
has_many :platforms
has_many :games, through: :platforms
end
class Platform < ApplicationRecord
belongs_to :game
belongs_to :console
end
我的路线是这样的:
resources :platforms, only: [:show] do
resources :games do
resources :consoles
end
end
理想情况下,在我猜是平台展示的最终 show.html.erb 上,我想在平台 PS4 上展示我专门为游戏 Forza 销售的产品,我选择了我选择的下拉菜单我的选择..
但是我的路线是这样出现的:
/platforms/:platform_id/games/:game_id/consoles/:id(.:format)
任何想法我哪里出错了?如果有更简单的方法解决这个问题?
非常感谢!
更新:
“平台”可能会有些混乱。也许“MarketPlace”会更合适。虽然现在读完了,但也许我不应该有第三个模型,而只是在控制台结束它。
如果选择了不同的游戏,我只是希望最终显示页面略有不同。
【问题讨论】:
-
你希望你的下拉菜单是什么
-
在我看来,您真正需要的只是一条路线,例如:
/platforms/:id;但相反,您想将此路线“别名”为/:game_name/:console_name。这是possible,但很难做到正确。如果您使用更容易匹配的路线怎么办 - 例如/platform?game_name=<...>&console_name=<...>?这仍然违反 Rails 约定,但更容易构建。 -
PS4 是一个控制台,而 Forza 是一个游戏。平台的名称是什么?
-
@Pavan 我可以看到模型的用途,但命名令人困惑。也许像
GameRelease这样的东西更好?name可以是"Forza for PS4"。
标签: ruby-on-rails ruby controller routes associations