У меня есть вспомогательный метод, предназначенный для генерации ссылки на определенный путь в зависимости от текущей страницы, на которой находится пользователь. По сути, для всей страницы ссылка должна указывать на items_path, если пользователь не находится на странице пользователя. Итак, я пытаюсь выработать СУХУЮ логику, но продолжаю сталкиваться с неприятностями:
def items_link(title, options = {}, html_options = {})
path = request.path
case path
when users_path,items_path
options = request.parameters.merge(options)
end
link_to_if(path == users_path, title, users_path(options), html_options) do
link_to(title, items_path(options), html_options)
end
end
С этим решением items_path выдает ошибку No route matches
, хотя маршрут правильный. users_path работает нормально, пока я не переключаю путь link_to_if с помощью link_to.
link_to_if(path == items_path, title, items_path(options), html_options) do
link_to(title, users_path(options), html_options)
end
Итак, я предполагаю, что моя проблема где-то в link_to_if. Я рядом? Мое текущее рабочее решение:
def items_link(title, options = {}, html_options = {})
path = request.path
case path
when users_path
options = request.parameters.merge(options)
link_to(title, users_path(options), html_options)
when items_path
options = request.parameters.merge(options)
link_to(title, items_path(options), html_options)
else
link_to(title, users_path(options), html_options)
end
end
Это отлично работает, просто безобразно.
Обновление:
Я потратил еще немного времени и решил, что мне нужно немного больше разобраться, и это действительно помогло мне в другой области, мне нравится иметь помощника link_action.
def items_link(title, options = {}, html_options = {})
link_to(title, items_link_action(options), html_options)
end
def items_link_action(options = {})
path = request.path
case path
when users_path,items_path
options = request.parameters.merge(options)
end
if path == users_path
users_path(options)
else
items_path(options)
end
end