Ruby on Rails路由,双嵌套Slugs

时间:2014-01-28 21:31:59

标签: ruby-on-rails rails-routing

我正在尝试设置应用程序的基本路由和URL。我使用FriendlyId gem来获得更好看的网址。

在我的模型设计中,帐户有用户,帐户有农场。当用户登录时,我想将其重定向到myapp.com/account-name。此页面应该是该帐户的服务器场的索引页面,以及其他一些选项。当他们点击服务器场时,我希望该页面转到myapp.com/account-name/farm-name

我该怎么做?这不完全是反RESTful的,不包括URL中的/ account或/ farm吗?如果是,那么我该怎么做才能让网址为myapp.com/account-name/farms/farm-name

现在我通过

正确显示myapp.com/account-name
get "/:id", to: "accounts#show", as: 'account'

但我不认为我可以扩展到包括农场。我认为它可以通过类似

的方式解决
resource :account do
    resource :farms
end

但是当我转到帐户时显示myapp.com/account.account-name,当我执行类似redirect_to account_path(current_user.account)的操作时,它会使用POST路由而不是GET路径。

我在Rails上体面的新人,对于误解感到抱歉。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

如果Farm belongs_to Account(而不是HABTM),shallow nesting可能是一个很好的路线结构。

答案 1 :(得分:0)

我已经发现我可以通过在路线文件中再添加一行来实现这一目标

get "/:account_slug/:id", to: "farms#show", as: 'account_farm'

然后我可以使用

链接到视图中的服务器场
<%= link_to farm.name, account_farm_path(account_slug: @account.slug, id: farm.slug)

我仍然对任何关于这是否是好的做法或任何其他建议的答案感兴趣。