Переменные пути используются для указания ресурсов, и обычно одна переменная указывает один ресурс.Например:
get '/publishers/:publisher_id/articels/:article_id/comments/:id'
В вашей настройке у вас есть places
в качестве ресурса.Таким образом, в этой конечной точке get '/places/:id'
: id указывает, какое место следует удалить.
Что касается вашего первого маршрута, было бы наиболее целесообразно оставить только одну конечную точку получения:
resource :places, only: [:show] # => get '/places/:id'
и пройтиидентификатор родителя или прародителя как: id всякий раз, когда вам нужно получить место родителя или прародителя.Таким образом, вам не понадобятся какие-либо условия в методе set_place, поэтому имейте:
def set_place
@place = Place.find(params[:id])
end
В случае, если вам нужен доступ к родителям или бабушкам и дедушкам объекта place, вы можете создать:
get '/places/:place_id/parents/:parent_id/grandparents/:id'
или просто оставьте get '/places/:place_id/parents/:id'
и всякий раз, когда вам понадобится доступ к бабушке и дедушке, просто звоните, начиная с вашего родительского места, а не от ребенка.Настройки маршрута могут отличаться в зависимости от ваших потребностей.Rails предоставляет различные примеры на этот счет: Маршрутизация Rails извне
Что касается помощников, не существует общего правила для переопределения или нет ваших методов пути, и опять же, это в основном зависит отпотребности приложений.Я думаю, что это хорошая практика, чтобы сохранить их как можно больше.В вашем случае вместо переопределения метода пути вы можете поместить:
thread_posts_path(thread) + '#post-' + post.id # => /threads/7/posts#post-15
прямо на ваш взгляд, например:
link_to 'MyThredPost', thread_posts_path(thread) + '#post-' + post.id