Rails link_to_if проблемы - PullRequest
       2

Rails link_to_if проблемы

0 голосов
/ 11 февраля 2011

У меня есть вспомогательный метод, предназначенный для генерации ссылки на определенный путь в зависимости от текущей страницы, на которой находится пользователь. По сути, для всей страницы ссылка должна указывать на 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

Ответы [ 2 ]

0 голосов
/ 11 февраля 2011

Это так близко, как я, работает довольно хорошо, я думаю.

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
0 голосов
/ 11 февраля 2011

Имеет ли смысл добавлять одинаковые параметры в любую ссылку?Это может быть причиной ошибки «Нет совпадений маршрутов».

Я бы посмотрел на current_page?helper и помощники link_to_unless_current.

Примерно так будет отображаться ссылка на действие индекса пользователя, если они еще не включены в действие индекса пользователя.То же самое можно сделать для страницы товаров.Не уверен, что это то, что вы искали.Если бы это был я, я бы просто отбросил две ссылки в своем макете или общую партию:

<%= link_to_unless_current "Users", users_path %>
<%= link_to_unless_current "Items", items_path %>
...