Маршрутизация Ruby on Rails, двойные вложенные слаги

Я пытаюсь настроить базовую маршрутизацию и URL-адреса своего приложения. Я использую драгоценный камень FriendlyId, чтобы иметь более красивые URL-адреса.

В моем дизайне модели у учетной записи есть пользователи, а у учетной записи есть фермы. Когда пользователь входит в систему, я хочу перенаправить его на myapp.com/account-name. Эта страница должна быть индексной страницей ферм этой учетной записи, наряду с некоторыми другими параметрами. Когда они нажимают на ферму, я хочу, чтобы страница переходила на myapp.com/account-name/farm-name.

Как мне это сделать? Это просто полностью анти-RESTful, чтобы не включать /account или /farms в URL-адрес? Если это так, то что я могу сделать, чтобы URL-адрес был 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, так что извините за недопонимание. Спасибо за вашу помощь!


person Louis    schedule 28.01.2014    source источник


Ответы (2)


Если Farm belongs_to Account (в отличие от HABTM ), неглубокое вложение может быть хорошей структурой маршрута.

person Bob Mazanec    schedule 29.01.2014

Я понял, что могу сделать это, добавив еще одну строку в файл маршрутов

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

Затем я могу связать ферму в представлении с

<%= link_to farm.name, account_farm_path(account_slug: @account.slug, id: farm.slug)

Меня все еще интересуют любые ответы о том, является ли это хорошей практикой или нет, или любые другие рекомендации.

person Louis    schedule 28.01.2014